我目前正在研究一個簡單的函數,它將對輸入的字符串進行編碼,其中所有可能的排列組合都是可能的。我的代碼如下。JavaScript字符串中的加擾字符,是否可能具有相同的可能性?
function scramble(s) {
result = s.split("");
for(var i = 0; i < s.length; i++) {
var j = Math.floor(Math.random() * (i + 1));
var scrambler = result[i];
result[i] = result[j];
result[j] = scrambler;
}
return result.join("");
}
到目前爲止,代碼似乎是工作的罰款...但是將所有可能的排列也同樣有可能? (我相信Math.random和Math.floor,但是當我在運行時期間觀察i和j時,我會感到奇怪的輸出。)
你問我們要證明你的算法的正確性嗎?爲什麼不使用[Fisher-Yates](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle)等知名或研究的內容? – Rup
檢查一下 - 第一個字符可能會在第一次迭代中出現在哪裏? – Leeor
請參閱http://www.robweir.com/blog/2010/02/microsoft-random-browser-ballot.html –