고유 한 요소의 임의의 개수를 생성해야하는 컬렉션 [1, 2, 3, 4, 5, 6, 7, 8,9]이 있습니다. 5, 3, 7, 9, next time : 4, 8. 내 함수는 잘 작동하지만, 난수를 생성하고 이미 중복이 없는지 검사하는 함수에 대한 재귀 호출 때문에 StackOverflowError가 throw되는 경우가 있습니다. 나는 이것이 어떻게되는 것을 막을 수 있는지 궁금합니다.StackOverflowError 및 난수
-1
A
답변
1
재귀를 사용하지 않고이 작업을 수행해야합니다. 더 잘 작동 할 수 알고리즘의 거친 스케치 :
- 는
- 배열 에 목록을 변환 소스 배열을 통해 이동하고 목록
- 에 50 %의 확률로 각 요소를 추가 빈 목록을 만듭니다 배열에
- 사용 Arrays.shuffle()는 무작위 요소 작업을 수행해야합니다
순서를 변경합니다.
1
하나의 솔루션은 재귀가 아닌 반복 (for
또는 while
루프)을 사용하는 것입니다.
다른 해결책은 컬렉션의 변경 가능한 복사본을 만드는 것부터 시작하여 컬렉션에서 요소를 선택할 때마다 은 요소를 제거하여 다시 선택의 위험이 없습니다. 그러나 컬렉션의 실제 사본 (예 : new ArrayList<Integer>(originalCollection)
)을 만들어 원본에서 요소를 제거하지 않도록하십시오.
0
전체 목록의 각 요소는 특정 요소 모음에 있거나 존재하지 않습니다. 바이너리를 사용하라는 말입니다.
0b000000000
은 [] 즉 모든 숫자가 없음에 매핑됩니다.
0b111111111
은 [1, 2, 3, 4, 5, 6, 7, 8, 9] 즉 모든 숫자가 매핑됩니다.
2 진수로 처리되는 두 숫자 사이의 숫자는 전체 모음의 하위 집합으로 매핑됩니다.
0b001010101
[3, 5, 7, 9]의 범위
각각 이진수 고유 한 서브 세트로 매핑 할 매핑. 귀하의 예는 주문이 중요 할 수 있음을 암시합니다. 그렇다면 별도로 처리해야합니다. 이 방법은 최대 2^9 = 512 개의 다른 조합을 제공합니다.
관련 문제
- 1. Gson StackOverflowError
- 2. 난수 생성 및 캡슐화
- 3. 안드로이드 네트워크 프로그래밍 : IOExceptions 및 StackOverflowError
- 4. StackOverflowError 1.5 대 1.6
- 5. 난수
- 6. 난수
- 7. 부울 논리 시뮬레이터 - StackOverflowError
- 8. 안드로이드 : DatePicker의 StackOverflowError
- 9. StackOverflowError on context
- 10. Twitter 예제의 StackOverflowError
- 11. Eclipselink 캐시가 없습니다 StackOverflowError
- 12. TableModelListener에 의한 StackOverflowError
- 13. tail-recursive 함수에서 StackOverflowError
- 14. PreferenceActivity가 포함 된 StackOverflowError
- 15. JasperReport를 생성하는 StackOverflowError
- 16. Javadoc을 실행하는 동안 Stackoverflowerror
- 17. 안드로이드 StackOverflowError in ViewGroup.resetResolvedTextDirection
- 18. StackOverflowError on Activity.onCreate
- 19. Java 및 Cryptographically Strong 난수
- 20. 난수 테스트
- 21. 하스켈과 난수
- 22. StackOverflowError Java "Fill Image"함수에서
- 23. H2 (임베디드) Java 데이터베이스 - StackOverflowError
- 24. StackOverflowError 탭의 dbhelper 닫기 활성화
- 25. 난수 생성
- 26. 난수 발생기는
- 27. 난수 발생
- 28. 난수 C
- 29. 난수 생성기
- 30. 난수 생성기
관련 코드를 게시하십시오. – kosa
[이 링크] (http://stackoverflow.com/questions/11842533/generating-random-unique-data-takes-too-long-and-eats-100-cpu) 도움이 될 것 같아요. 이전에 비슷한 문제에 직면 했었습니다. 하지만 일부 코드를 게시해야한다고 생각합니다. –
[StackOverflowError 란 무엇입니까?] (http://stackoverflow.com/questions/214741/what-is-a-stackoverflowerror)의 가능한 복제본 – Raedwald