アルゴリズム-shuffleDeck
8493 ワード
ランダムハイブリッドアレイ
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
リファレンス
Reference
この問題について(アルゴリズム-shuffleDeck), 我々は、より多くの情報をここで見つけました https://velog.io/@leobit/알고리즘-shuffleDeckテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol