두 작업을 효율적으로 지원하는 데이터 구조를 아는 사람이 있습니까?임의의 요소를 선택하기위한 데이터 구조?
- 데이터 구조에 값을 삽입하십시오.
- 균일하게 임의의 확률로 데이터 구조에서 항목을 큐 해제하고 반환합니다.
이것은 입문 확률 클래스에서 항상 등장하는 정식 "구슬 가방"과 유사합니다. 가방에 임의의 구슬을 넣을 수 있으므로 구슬을 효율적으로 무작위로 제거 할 수 있습니다.
내가 가진 최선의 해결책은 다음과 같습니다 - 요소를 저장하기 위해 자기 균형 이진 검색 트리 (AVL, AA, 빨강/검정 등)를 사용하십시오. 이것은 O (lg n) 삽입 시간을줍니다. 무작위 요소를 제거하려면 무작위 색인 i를 선택한 다음 트리에서 i 번째 요소를 찾아 제거합니다. 적절하게 구조를 보완했다면, 이것은 O (lg n) 시간에도 실행되도록 만들 수 있습니다.
이 런타임은 나쁘지는 않지만 삽입이 O (1)이고 대기열에 대해 O (lg n) 일 가능성이 있다면 궁금합니다. 또는 아마도 에서 실행되는 뭔가가 O (1) 삽입 및 삭제 해시 함수를 사용하여? 아니면 더 큰 상각 된 경계?
누군가가 이것을 점진적으로 빠르게 만드는 방법에 대한 아이디어가 있습니까?
호기심에서 벗어났습니다.이 데이터 구조에 이름이 있는지 여부는 누구에게 알 수 있습니까? 그것은 분명히'Bag'이나'MultiSet'의 한 종류입니다. 'RandomBag', 아마도? 사실, 일반적으로 *라고 불리는 데이터 구조 (즉,'pop'이 반환하고 임의의 요소를 제거하는 데이터 구조)는 무엇입니까? –
여기에 Bag과 RandomBag라는 용어가 사용되었지만 RandomBag가 적절한 용어라고 생각합니다. 가방은 대개 멀티 세트의 동의어입니다. – templatetypedef