2013-10-17 3 views
0

내가 같은 주어진 테이블의 기존 행 셔플 피셔 - 예이츠 shuffle을 사용하려면 : JQuery와의 약간의 도움으로피셔 - 예이츠 셔플 테이블 행

<table> 
    <tbody id="parent"> 
     <tr id="node1"> 
      <td>1</td> 
      <td>A</td> 
     </tr> 
     <tr id="node2"> 
      <td>2</td> 
      <td>B</td> 
     </tr> 
     <tr id="node3"> 
      <td>3</td> 
      <td>C</td> 
     </tr> 
     <tr id="node4"> 
      <td>4</td> 
      <td>D</td> 
     </tr> 
     <tr id="node5"> 
      <td>5</td> 
      <td>E</td> 
     </tr> 
     <tr id="node6"> 
      <td>6</td> 
      <td>F</td> 
     </tr> 
    </tbody> 
</table> 

을, 나는 다음과 같은 한 :

var parent = $("#parent"); 

function shuffleRows(parent) { 
    var rows = parent.children(); 
    for (var i = rows.length - 1; i > 0; i--) { 
     var j = Math.floor(Math.random() * (i + 1)); 
     var temp = rows[i]; 
     rows.eq(i - 1).after(rows[j]); 
     rows.eq(j - 1).after(temp); 
    } 
} 

shuffleRows(parent); 

동작하는 예제는 여기에 있습니다 : http://jsfiddle.net/98q9S/

그러나, 나는 위의 테스트로, 내가 도움이되지만 해당 행 A 다른 행보다 훨씬 더 자주 위 자리를 얻을 알 수 없습니다 s, 때로는 두 개의 연속 shuffle이 정확한 행 순서를 생성합니다.

내 구현에 문제가 있는지 궁금하거나 내 샘플 크기가 너무 작습니다.

+0

코딩 된대로 마지막 행 교환의 확률은 1/6입니다. 첫 번째 행 교환의 확률은 5/6입니다. 그 (것)들을 전부 줍고, 뒤섞고, 그 후에 다시 적용하십시오, 반복은 필요하지 않았다. – dandavis

답변

0

나는 알고리즘을 사용하여 만든 장난감 앱에서 비슷한 것을 발견했습니다. 나는이 사이트에서 찾은 또 다른 해결책으로 끝을 맺었다. 도움이되기를 바랍니다.

makeArrRandom = function(array) { 

    var counter = array.length, temp, index; 
    while (counter > 0) { 
    index = Math.floor(Math.random() * counter); 
    counter--; 
    temp = array[counter]; 
    array[counter] = array[index]; 
    array[index] = temp; 
    } 
    return array; 
}; 
+0

@eizs, 감사합니다. 그러나 너와 내가 어떻게 다른가? 솔루션은 기본적으로 for 루프를 while 루프와 교환합니다. – MLister

+0

광산에는 하나의 추가 조치가 있습니다. 또한 각 위치가 섞여 있습니다. – ezis