0~1000까지 임의의 수로 나타내고 싶을때
그냥 일단 뽑고 중복되면 다시 랜덤 돌리면
999개 뽑았을때 좆도 느려지니까
난 그냥 리스트에다가 0~1000까지 순차적으로 넣고
처음엔 1000개 중에 임의로 하나 선택해서 ex) 300번째거 랜덤으로 나오면 그걸 이제 리스트에서 삭제하면서 값을 얻어오고
그담엔 전에 한개 지웟으니까 999개중에 임의로 하나 뽑고
이렇게 했는데
안좋은 방법 ?
그냥 일단 뽑고 중복되면 다시 랜덤 돌리면
999개 뽑았을때 좆도 느려지니까
난 그냥 리스트에다가 0~1000까지 순차적으로 넣고
처음엔 1000개 중에 임의로 하나 선택해서 ex) 300번째거 랜덤으로 나오면 그걸 이제 리스트에서 삭제하면서 값을 얻어오고
그담엔 전에 한개 지웟으니까 999개중에 임의로 하나 뽑고
이렇게 했는데
안좋은 방법 ?
좋은방법
해쉬로 비트맵
메모리가 먼저냐 속도가 먼저냐
배열에다가 1에서 n까지 할당하고, 1에서 n사이의 rand를 돌려서 배열의 인덱스로 삼는다. 한번 뽑힌 값은 -1 같은 값을 대입해서 표시해 두고 만약 표시된 값이 뽑혔다면 인덱스를 +1해가면서 다음수를 뽑는다. 만약 배열의 끝에 도달하면 인덱스를 0으로 바꾼 뒤 다음수를 뽑고, 원래의 인덱스로 돌아온다면 프로그램 끝
안 좋은 방법 이라고 생각한다. 리스트를 삭제할 때 메모리 해제하는 시간도 꽤 길고, 무엇보다 리스트는 항상 맨 처음부터 순차적으로 접근해야 한다. 즉 난수에서 1000 이 나왔다면 1000번째 리스트에 뭐가 들어있는지 보기 위해서 1000회의 접근을 시도해야 하는데 접근횟수가 너무 많으니 시간이 낭비되지 않을까 라는 생각이 든다
굳이 뽑지 않아도 대충 셔플한뒤 앞에 여섯개만 뽑는다던지 하면 도지
뽑앗던 값은 제일 마지막 인덱스랑 스왑 경계값 -1 리스트는비효율적이지 이해가나?
-1이 나와서 그다음 인덱스를 뽑는거는 군집에 치명적이다 리스트를 쓰는것마냥 비효율적이지
아니 지금 모바일이라 설명 못하겟는데 쫌다 글 한번 올리지
ㅇㅇ 횽이 제일 베스트지 어쨋건 리스트는 구현상인 문제인거고 애초에 중복되지 않게 모아둔뒤 거기서 뽑을 생각을 햇으니까
군집에 치명적이다라는건 십죳형이 경계값이 머라 생각하고 설명하는거야?
오해가 잇나본데 생각놀이횽 댓글보고 쓴거야 나는 ㅇㅇ 횽이랑 같은 방법이 제일 낫다고 생각
아이고 모바일 너무 불편해 위에 글은 취소요
경계값이란게 처음에 0부터 1000 이라면 하나 뽑고 나서는 마지막 놈이랑 스왑하고 0부터 999 중에 하나 뽑고 그런거겟지
작성자에게 조금따 예제하나 올려주게슴 나두 오해함 미안
아 그걸 내가 깨달았으면 좋았는데,, 아무튼 좋은 정보 고맙습니다 ^^;