簡體   English   中英

在O(log n)時間內從二叉樹中獲取隨機數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM