유사난수(pseudorandom number)는 난수를 흉내내기 위해 알고리즘으로 생성되는 값을 가리킨다.
이 때 유사난수를 생성하는 알고리즘을유사난수 생성기(pseudorandom number generator,PRNG)라고 부른다.
유사난수는 알고리즘의 상태에 의해 값이 정해지므로 생성된 수열은 일정한 주기를 가지며, 따라서 난수의 예측 불가능성을 가질 수 없다.
예측 불가능성이 필요한 경우 하드웨어와 같이 외부 신호를 이용하는 하드웨어 난수 생성기를 사용한다.
(Technically, a computer-shuffled deck will usually be "pseudorandom", not "truly" random.
However, the difference between the two is too small to be detectable by any known test.)
카드 덱을 셔플하기 위한 알고리즘을 아래와 같이 짜 볼 수 있었다.
//먼저 정렬된 덱을 생성해준다
var orderedDeck = function() {
var suits = [ '♥', '♣', '♠', '♦' ];
var values = [ 'A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K' ];
var deck = [];
suits.forEach(function(suit) {
values.forEach(function(value) {
deck.push(value + suit);
});
});
return deck;
};
//정렬된 덱을 인자로 받아 셔플시킨다
var shuffleDeck = function(deck) {
let result = [];
for(let i = deck.length - 1; i >= 0; i--) {
let makeRandom = Math.floor(Math.random() * deck.length);
result.push(deck[makeRandom]);
deck.splice(makeRandom, 1);
}
return result;
};
<의사난수>
rotated Array Search with O(log n) - javascript (0) | 2019.10.07 |
---|---|
로마 숫자 변환 - Javascript (0) | 2019.07.13 |
asyncMap method for array of multiple functions - Javascript (0) | 2019.06.28 |
balanced parentheses - Javascript (1) | 2019.06.27 |
BreadthFirstSearch in Tree - Javascript (0) | 2019.06.21 |
댓글 영역