현재 가능한 모든 순열이 인 인 입력 된 문자열을 스크램블하는 간단한 기능을 수행 중입니다. 내 코드는 아래와 같습니다.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를 볼 때 별난 결과물을 얻는다.)
당신이 당신의 어법의 정확성을 증명하길 원하십니까? [피셔 - 예이츠] (http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle)와 같이 잘 알려져 있거나 연구 된 것을 사용하지 않으시겠습니까? – Rup
잠시 확인하십시오 - 첫 번째 캐릭터가 첫 번째 반복에서 어디로 갈 수 있습니까? – Leeor
http://www.robweir.com/blog/2010/02/microsoft-random-browser-ballot.html을 참조하십시오. –