我經常*發現自己在需要具有下述性能的數據結構組成:無需更換採摘在Java
- 可以與n個對象中的O(N)的數組進行初始化。
- 可以獲得O(1)中的隨機元素,在此操作之後,從結構中移除摘取的元素 。 (沒有替換)
- 一個可以撤消p操作 '無需更換採摘' 在O(P)
- 一個可以從該結構中O上卸去的特定對象(例如,通過ID)(的log(n))
- 可以獲得當前在 O(n)中的結構中的對象的數組。
複雜其他行動(甚至可能)(例如插入)沒有關係。除了複雜性之外,它還應該對少量的n有效。
任何人都可以給我指導實施這樣的結構嗎?我目前實現了一個具有以上所有屬性的結構,除了元素的挑選需要O(d)和d過去的選擇數(因爲我明確地檢查它是否'尚未挑選')。我可以找出允許在O(1)中選擇的結構,但這些結構至少在其他一個操作中具有更高的複雜性。
BTW: 請注意,上面的O(1)意味着複雜度獨立於#earlier選取的元素並且獨立於總的#elements。
*蒙特卡洛算法(從n個元素的'集合'中迭代選擇p個隨機元素)。
什麼是N,p,和d的一些值? – Ron