Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. // Made as proof of concept - malulleybovo@2019
  2.  
  3. // A simple and fair array shuffle algorithm
  4. var randomizeArray = function(arr) {
  5. if (arr == null || !Array.isArray(arr)) return [];
  6. arr = arr.slice(0);
  7. var randArr = [];
  8. while (arr.length > 1) {
  9. randArr.push(arr.splice(
  10. Math.floor(Math.random() * arr.length), 1));
  11. }
  12. if (arr.length == 1) randArr.push(arr[0]);
  13. return randArr;
  14. }
  15.  
  16. var N = 10; // Array size
  17. var M = 100000; // Number of tests
  18. var deviations = []; // Standard deviation per array position
  19.  
  20. // Create the test array
  21. var arr = [];
  22. for (var i = 0; i < N; i++) arr.push(i);
  23. // Test fairness of algorithm
  24. for (var i = 0; i < N; i++) {
  25. var prob = [];
  26. for (var j = 0; j < arr.length; j++) prob.push(0);
  27. // Get the distribution per element of the original array
  28. for (var j = 0; j < M; j++) {
  29. var testArr = randomizeArray(arr);
  30. prob[arr.indexOf(parseInt(testArr[i], 10))] += 1 / M;
  31. }
  32. // Get standard deviation for every position of the random array
  33. var avg = 0;
  34. for (var j = 0; j < N; j++) {
  35. avg += Math.pow(prob[j] - (1 / N), 2);
  36. }
  37. avg /= N;
  38. avg = Math.sqrt(avg);
  39. // Save results
  40. deviations.push(avg);
  41. }
  42.  
  43. console.log("Standard Deviation per Array Position: " + deviations);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement