アルゴリズム-shuffleDeck


ランダムハイブリッドアレイ


1.配列要素を混合するための任意の整数を生成します.
2.任意の数値に基づいてソートを実行します.
3.整列した要素のみを抽出し、新しい配列で表します.
const shuffleDeck = function (deck) {
  // 랜덤한 숫자, 요소의 배열 제작
  return deck.map(ele => ([Math.random(),ele]))
  .sort((a,b) => a[0]-b[0]) // 정렬(매번 같은 위치X)
  .map(result => result[1]) // 최종 정렬된 요소만 가져오기
}
//  → shuffleDeck EXTRA CREDIT: not PASS
上に作成したアルゴリズムはMathです.random関数を使用して「乱数」を生成します.この場合、生成される乱数は擬似乱数になります.蘭手 / 流砂
Math.random
この関数は、現在の時間ミリ秒を使用して整数を生成するため、計算機の時間を整数を生成する時間に戻すと、以前と同じ整数が生成されます.
線形の時間的複雑さを有する.アレイがNに増加したときに「オフセットなし」を維持する必要がある場合、どのアルゴリズムを使用しますか?
オブジェクトを入れる方法で解決することもできます.(下線のshuffle)
const shuffleDeck = function (deck) {
  return deck.map(ele=> ({ sort : Math.random(), value:ele}))
  .sort((a,b)=> a.sort - b.sort)
  .map(result => result.value)
}
Javascript]配列(配列)ではなくオブジェクト(オブジェクト)を使用する必要がある場合は、配列をオブジェクトに置き換えます。
時間的複雑度O(N)を持つFisher-Yatesソフトウェアを利用することで時間を短縮できる.
const shuffleDeck = function (deck) {
    for (let i = deck.length - 1; i > 0; i--) {
    let j = Math.floor(Math.random() * (i + 1));
    [deck[i], deck[j]] = [deck[j], deck[i]];
  }
  return deck
}

パフォーマンステストに使用されるパフォーマンス。now()とコンソール。time()


関数の先頭にt 0を加え、関数の末尾にt 1を加えてtotal timeを求めればよい.

console.時間を利用しても直感的に見ることができます.リファレンス

performance.now() - MDN
performance.now()とData。now()との違い 現代JavaScript
リファレンス