[英]Getting a random number from a binary tree in O(log n) time
是否有可能在O(log n)時間內從平衡二叉搜索樹獲得均勻分布的隨機值(調用函數意味着它同樣可能在樹中獲得任何值)?
我最初的想法是生成一個隨機數0,1或2.如果為0,則從當前節點獲取左路徑,如果為1,則采用正確的路徑,否則節點的值為隨機值。 如果您點擊葉節點,請獲取該節點的值。 我不認為這會隨機分發。
這是出於好奇,而不是針對特定的應用程序。
如果您需要任何澄清,請告訴我。
例如,如果你有樹
1
/ \
2 5
/
3
調用int get_random_number()
時,將統一返回數字1,2,3和5
澄清:所有其他正常的BST操作應保持為O(log n),如insert(),delete()等。
您的想法不會創建隨機分布。 無論樹的大小如何,根都有1/3的機會被挑選。
如果知道樹中元素的數量,則生成1到N之間的數字k,並獲得樹的第k個最大元素。 請參閱此處 ,了解在O(logn)中進行平衡樹的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.