2014-09-21 53 views
1

在我的代碼,我想遍歷所有陣列中的人物,併爲3個字符每個可能的組合,請執行以下代碼,然後重複直到達到所有可能的組合循環訪問數組中的字符,爲每個可能的3個字符組合運行代碼?

我沒有知道從哪裏開始,請幫助,如果你能

這是我的代碼,感謝

var link = 'http://www.roblox.com/UserCheck/DoesUsernameExist?username='; 
var swap = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
//get all combinations of 3 objects in the swap array, for each do this: 
$.get(link+(the combination of three objects here)).success(function(r) { 
    if (r['success'] == false) console.log(the combination of three objects here); 
}); 
+0

組合是否可能無序? ('cab','bac'等) – 2014-09-21 07:46:16

+0

只要所有的組合都運行,它就不會重複組合 – Sam 2014-09-21 07:48:01

+0

您是否具有正在調用的函數DoesUserNameExist()的實現通過網址? – mrsrizan 2014-09-21 07:52:31

回答

1

您將需要一個相當複雜和相對耗時的程序來實現這一點。沒有內置函數可以爲你做到這一點。我不會爲你實現這個功能,因爲它會花費我更多的時間,而不是我願意花費的時間,這對你來說將會是好的,甚至是有趣的。但這裏有一些我的建議。

您需要實現一個決策樹來提出所有可能的組合或排列方式。 (如果你不知道組合和排列之間的區別,先看看它們。)

接下來,研究決策樹。決策樹將成爲您的算法遵循的過程,以實現可能的組合。簡而言之,它會創建一些三元素數組或三個字符的字符串。它將從「a」開始。然後,它將分支並創建一個新的數組或字符串,以'a'開頭,表示每個可能跟隨'a'的潛在元素。所以一個決策分支會把'b'作爲第二個字符。另一個分支會將'c'作爲第二個字符,第三個分支將放置在'a'之後,等等。這些雙字符分支中的每一個(每個可能性一個分支)然後將每個分支轉向可能的位置每個人都有其第三個要素。

這通常是用遞歸函數完成的,但也可以是迭代的。 (如果你不知道它們的含義,請查看它們)。如果你的原始數組中包含30個元素,那麼可能的排列數將是30^3;取決於你是否允許重複。

如果順序無關緊要,組合就是你想要的,而且實現起來會簡單一些,但仍然是一個相當複雜的算法。

希望這給你足夠的幫助,開始使用谷歌搜索。如果需要,請回復更具體的問題。

TL;沒編輯

+0

會有一個循環,只是隨機選擇3,並將它們添加到已掃描的組合數組中,如果3不在掃描的組合中,它會掃描它們? – Sam 2014-09-21 07:58:56

+0

「隨機」意味着不可預測,你怎麼知道你的程序會完成?理論上,它可以一次又一次地選擇相同的數字。 – 2014-09-21 08:02:50

+0

的確如此,但這個機會非常渺茫 – Sam 2014-09-21 08:04:27

0

這將需要P(36,3)=這將花費大量的時間42840個請求。如果你仍然要執行這個,你可以看看像in this question.

0

排列計算器你會使用他們都弄到三嵌套每個:

$.each(swap, function(index1, char1){ 
    $.each(swap, function(index2, char2){ 
     $.each(swap, function(index3, char3){ 

      var combination = char1 + char2 + char3; // Will give you "aaa", then "aab", then "aac"... 
      // do stuff 

     }); 
    }); 
}) 

然而,組合的總數爲36× 36 x 36這就是46656.你不想同時打這麼多的阿賈克斯電話:)

相關問題