我有一本字典的字典。密鑰是圖中的節點。例如,讓我們假設圖中的節點i由字典中的密鑰i表示。與該鍵對應的值又是一個字典,其中鍵是圖中節點i的鄰居。這些鍵有默認值1。讓我們看看下面的示例 -如何從字典詞典中刪除所有項目的發生?
該圖中的節點是 - [1,2,3,4,5,6]
鄰居:
1->[2,4,5,6]
2->[3]
3->[4,6]
4->[1,6]
5->[1]
6->[1,3,4]
所以詞典的詞典是這樣的:
{1:{2:1,4:1,5:1,6:1},2:{3:1},3:{4:1,6:1},4:{1:1,6:1},5:{1:1},6:{1:1,3:1,4:1}}
現在,在算法的不同階段,我想實現,我需要從其他節點的鄰居列表中刪除一個節點x的所有出現秒。如果x = 4,則刪除後,詞典的詞典應該是這樣的:
{1:{2:1,5:1,6:1},2:{3:1},3:{6:1},4:{1:1,6:1},5:{1:5},6:{1:1,3:1}}
我用字典的字典而不是列表的字典,使刪除效率。但它仍然是昂貴的。
這樣做的效率最高?
我曾經保留過neighbors_of數據結構,但沒有想到使用set!謝謝。我決定改變方法,因爲我認爲在預處理階段需要做太多的工作來創建數據結構,如果圖形規模龐大,這可能會很昂貴。 –
恐怕你在內存和CPU週期數之間有一個權衡。如果您想要騰出內存,則只能存儲一次連接。如果你想快點,你可以將它們存儲兩次。創建反轉表畢竟是一個快速操作,只需很少的代碼行。 (我猜如果你有幾千萬個連接,那麼你以後就不能和O(n)算法一起生活,因爲當你考慮所有的處理時,它們往往會變成O(n^2)。) – DrV
對。說得通。 –