A SO post關於生成所有的排列讓我想到了一些替代方法。我正在考慮使用空間/運行時的折衷方案,並想知道人們是否可以在嘗試使用C#實現時批評這種方法和可能的打嗝。排列查找算法的分析(僞代碼)
的步驟去如下:
鑑於均勻元素的數據結構,在計數結構元件的數目。
假設置換包括該結構的所有的元素,從步驟1
計算值的階乘實例化
<key(Somehashofcollection),Collection<data-structure of homogeneous elements>>
類型的一個較新的結構(詞典)和初始化的計數器。散列(???)來自步驟1的種子結構,並將散列和集合的鍵/值對插入字典中。通過1
隨機遞增計數器洗牌(???)種子結構的順序,它散列,然後嘗試將其插入字典從步驟3
如果存在衝突在哈希中,再次重複步驟5以獲得新的訂單和散列並檢查衝突。一旦成功插入由1
直到計數器等於步驟計算階乘重複步驟5 & 6,計數器增加2
好像做使用某種隨機的這種方式(這對我來說目前是一個黑匣子)可能有助於在不合理大小的數據集的適當時間範圍內獲取所有的排列組合。
這將是巨大的,得到這麼偉大的思想家一些反饋,進一步分析這種做法,其目的是從傳統的蠻力方法在這種性質的算法普遍,也實現這樣的算法的反響偏離使用C#。
感謝
感謝您的精心準備。這是我一直在尋找的那種分析。這樣做的目的不是爲了提出一種「更好」/「更差」/「非常糟糕」的方法,只是探索替代方案。作爲科學界的一部分,你的分析量化了缺點,但我認爲在迴應時,我們應該避免使用與敵意接近的言辭。 – 2010-07-22 14:26:29
@sc_ray:對不起,我不是故意要冒犯你。我會編輯它。 – 2010-07-22 14:30:10
@Moron:完全沒問題。因此,從時間的角度來看,從外行的話來說,問題源於隨機化,在實際縮小獨特的排列之前需要進行太多的嘗試,並且從空間的角度來看,存在不必要的重複存儲整個集合的開銷在存儲器中存儲簡單的哈希值就足夠了(考慮到哈希函數是完美的) – 2010-07-22 14:54:19