목표는 N 개의 노래에 대해 반복없이 1..N에서 임의의 노래를 선택하고 iPod 에서처럼 앞뒤로 반복 할 수 있습니다. 해시 테이블을 사용하여 임의의 노래를 저장했습니다. 더 좋은 방법이 있습니까?iPod과 같은 셔플 알고리즘을 효율적으로 구현할 수 있습니까?
답변
한 가지 방법은 LCG 기반의 의사 난수 생성기를 사용하여 노래를 선택하는 것입니다. 매 단계마다 노래 n + 1은 (an + b) Mod 2^N입니다. LCG의 기간이 N 이상인지 확인하십시오. LCG의 역수를 사용하여 역순으로 반복하십시오.
흥미로운 아이디어. 기간이 N보다 큰지 확인하는 방법은 무엇입니까? – McDowells
en.wikipedia.org/wiki/Linear_congruential_generator#cite_note-HullDobell-3 –
이것은 노래의 명확하게 임의가 아닌 순열을주지 않습니까? – templatetypedef
이 작업을 수행하는 간단한 알고리즘은 N 곡 모두의 목록으로 시작한 다음 Fisher-Yates Shuffle과 같은 알고리즘을 사용하여 배열 요소를 임의로 셔플하는 것입니다. 일단 그렇게하면, 모든 노래를 무작위로 순서없이 중복없이 주문할 수 있습니다. 목록에서 현재 색인을 추적하면 배열에서 앞으로 또는 뒤로 이동하여 다음 및 이전을 구현할 수 있습니다.
희망이 도움이됩니다.
그래서 O (NlogN)을 섞어서 O (N) 개의 공간을 검색하여 배열을 찾으십니까? – McDowells
@ McDowells- 사실, O (n) 만 셔플을 수행합니다 (Fisher-Yates는 O (n) 시간에 실행 됨). 그런 다음 배열에서 O (1) 조회 시간 만 수행합니다. O (n) 메모리를 사용하여 셔플 순서를 유지해야합니다. – templatetypedef
메모리의 비용이 적게 드는 인덱스 배열을 섞습니다. – arynaq
- 1. iPod과 같은 메뉴 만들기
- 2. Iterator를 사용하여 재귀 알고리즘을 구현할 수 있습니까?
- 3. Goertzel 알고리즘을 어떻게 구현할 수 있습니까?
- 4. Java로 다차원 배열을 효율적으로 구현할 수 있습니까?
- 5. Java에서 seqlock을 효율적으로 구현할 수 있습니까?
- 6. 여기서 정렬 알고리즘을 구현할 가치가 있습니까?
- 7. App Engine에서 웹 요청에 대한 속도 제한 또는 스로틀 알고리즘을 효율적으로 구현할 수 있습니까?
- 8. KMP 알고리즘을 구현할 때 어떤 문제가 있습니까?
- 9. 자바 스크립트에서 셔플 알고리즘을 사용하여 색인을 추적합니다.
- 10. 여러 개의 반환 값을 효율적으로 구현할 수 있습니까?
- 11. QTimer를 사용하여 멀티 스레드 알고리즘을 구현할 수 있습니까?
- 12. 정규 표현식을 사용하여 션트 알고리즘을 구현할 수 있습니까?
- 13. 파이썬을 사용하여 화재 감지 알고리즘을 구현할 수 있습니까?
- 14. 어떻게 unordered_map을 트리 데이터 구조로 효율적으로 구현할 수 있습니까?
- 15. 피셔가 왜 가장 유용한 셔플 알고리즘을 사용합니까?
- 16. 스레드 안전 Java에서 싱글 톤 패턴을 효율적으로 구현할 수 있습니까?
- 17. 같은 번호의 목록을 효율적으로 만들 수 있습니까?
- 18. insert() 알고리즘을 구현할 때 문자열 값 결정
- 19. 파이썬에서 임의의 이미지 알고리즘을 구현할 때 경계 픽셀을 효율적으로 처리하는 방법
- 20. 다음을 어떻게 구현할 수 있습니까?
- 21. 어떻게 안드로이드에서 검색 창을 구현할 수 있습니까?
- 22. 그래프를 목록으로 구현할 수 있습니까?
- 23. 속성이 인터페이스를 구현할 수 있습니까?
- 24. SpreadsheetApp - 어떻게 구현할 수 있습니까?
- 25. 어떻게 FileTimeToSystemTime을 구현할 수 있습니까?
- 26. 목록이있는 로커에서 quicksort를 구현할 수 있습니까?
- 27. 어떻게이 연결을 구현할 수 있습니까?
- 28. jquery에서 다중을 구현할 수 있습니까?
- 29. 어디에서 "깃털"과 같은 깃털 알고리즘을 찾을 수 있습니까?
- 30. 그래프 이론 알고리즘을 효율적으로 수행하는 방법
코드를 공유 할 수 있습니까? – pollirrata
당신이 쓰고있는 것을 모른 채 이것을 쓰는 것이 조금 어렵습니다! – GriffLab
앞뒤로 반복 할 때의 의미는 무엇입니까? – arynaq