簡體   English   中英

如何在不排序列表的情況下找到隨機列表中兩個數字之間的最短距離。 我的代碼如下,我需要另一種快速的方式

[英]how find the shortest distance between two numbers in a random list without sorting the list. my code is given below , i need another FAST way

    
import random



L = [random.randrange(1, 100**7) for i in range(100*100)]
       
#it creates a random list

for x in L:
    min = L[0]
    for y in L:
        if x != y and abs(x-y) < min:
            min = abs(x-y)
**#it basically cheeks every element with every one and update the min value id new one is found**


print(min)

沒有排序的更快的方法嗎? 有人建議它可以使用哈希表來完成,但我無法與之相關,所以請幫助我解決這個問題與哈希表的邏輯和聯系

數字可以根據其二進制(或其他)表示存儲在嵌套列表中。 我們使用固定數字(對於本例 3)。 例如 2 將表示為010

然后我們放入一個元素

numbers[0][1][0]

只有數字 2 的樹將是:

[
    [None, [True, None]], None
]

如果我們添加數字 3 (011):

[
    [None, [True, True]], None
]

添加數字 1 (001):

[
    [[None, True], [True, True]], None
]

所有列表都有 2 個元素,並根據需要創建。 未使用的元素被設置為“無”

我們實際上不需要輸入數字,因為所有信息都在索引中。 所以我們只用True表示數字 2 在樹中。

現在要在樹中找到與其他數字更接近的數字,只需進行二分搜索即可。

現在將最小距離與存儲的最小距離進行比較,如果需要更新存儲的最小距離並將新數字存儲在樹中。

我認為這是 O(N * logN)。 日志來自二進制存儲和搜索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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