回答
好吧,你有一個最大和最小的我有以下想法: 你動態地保持這個最大值或最小值和有一個免費整數列表。起初你從一個空的列表和全部範圍開始。 當某人租用一個整數時,如果列表爲空,如果不是我們從列表中取出,則該範圍的大小會減少一個。 如果他釋放他的整數有兩種可能性:
- 所以你增加範圍大小
- 它位於遠離的範圍內,所以你把它放到它適合你的最大/最小範圍的邊緣清單
這應該讓您有可能以低成本維持高和低自由整數。 當然,您也可以嘗試保存幾個範圍,將整數集中在一起,但這需要更復雜的操作。
我喜歡這一點。我的另一個想法是從一個範圍開始,一旦使用了整個範圍,就回到基於列表的機制。這只是最小化啓動成本。 – Plumenator 2011-06-15 10:58:22
對於多個範圍,我聽說這些範圍樹和間隔樹是好的嗎?我記得看到一個IP地址池的實現,他們使用了一些範圍的概念,但它絕對不是一棵樹(或是它?) – Plumenator 2011-06-15 10:59:34
抱歉,但我不知道那些樹。我的想法只是一些新鮮想法,我相信已經有一些解決方案,因爲DHCP服務器應該有效地進行編程(至少我希望如此)並解決同樣的問題。也許你也應該去看看,因爲我的想法不是「精心製作」 – Nobody 2011-06-15 21:02:11
你期望有更多的免費或更多使用的整數? 你是否想要保存IP,SessIds和TunIds在同一時間或每個排除其他?
對我來說,最平衡的就是一棵樹,但正如你所知的最大尺寸,如果沒有頻繁的變化,一個數組就足夠了。
當你不關心某些命令,那麼動態列表將是最好的。
假設我只需要存儲一種'id'以簡化操作。我給出的各種例子都是假設的。如果您仍然好奇,我的使用案例是GTP隧道ID。我不能說我們是否會在特定時間有更多的免費或使用ID,但我們應該爲最壞的情況做好準備,這是全部使用。 – Plumenator 2011-06-14 15:40:00
我會保留一個空閒列表和一個使用的列表。分配一個數字意味着將它從空閒列表移動到使用的列表中,並且反向分配。
有將保持列出了成本,但找到一個免費電話號碼是快
這就是我目前所做的。但是我最終在發佈時在列表中創建了2^24個節點。所以,內存使用情況是不變的,實際上是最糟糕的情況。 – Plumenator 2011-06-14 15:40:38
- 1. 現在哪些數據結構更好?
- 2. 可以使用哪些數據結構來增強代碼可維護性?
- 3. 哪個數據結構可能是更高效的實現?
- 4. 實現一個TRIE數據結構
- 5. 數據結構來實現連接
- 6. 關係數據庫系統使用哪些數據結構來存儲數據?
- 7. 是否可以實現通用維數據結構?
- 8. 哪些數據結構,用來存儲字符串
- 9. 哪些整數從一組整數到XOR來製作一個目標整數?
- 10. 我可以使用哪種數據結構/類來表示一對多關係?
- 11. [數據結構]:選擇一個數據結構來構建一個圖表
- 12. Linux內核中有哪些數據結構可用
- 13. wordpress可以使用哪些數據庫?
- 14. 什麼樣的數據結構可以實現並行處理
- 15. 實現功能結構:使用哪種數據類型?
- 16. 什麼是隱式數據結構?並且是一個隱含的數據結構來實現優先隊列?
- 17. python - 哪個數據結構用作一個數組的字典?
- 18. 哪個數據結構可以存儲OID
- 19. 哪個數據結構可以處理二維線段
- 20. 哪個集合/數據結構可以處理鍵值,值
- 21. Mahout爲非結構化數據帶來了哪些優勢?
- 22. 有效的數據結構來存儲一個字符串,一個整數和每個記錄的實數
- 23. 如何實現qsort()來爲一個結構數組工作?
- 24. Ruby on Rails現在可以使用哪些數據庫後端?
- 25. HashSet使用哪個數據結構?
- 26. 使用哪個C#數據結構?
- 27. 要應用哪個數據結構?
- 28. 使用NSTextfield數據來構建一個整數數組?
- 29. 如何使用來實現to_query(數據)花好月圓結構
- 30. 堆棧使用結構或類來實現其私有數據
此問題與內存分配非常相似。您可能會在該問題域中找到一些答案。 – 2011-06-15 12:21:56
我明白你的意思了。如果我使用malloc,則每個字節的內存將對應於我的問題中的一個整數。對? – Plumenator 2011-06-15 12:26:31
是的,確切地說。 (如果你實現了「沒有人」的答案,你需要解決類似於內存碎片的問題) – 2011-06-15 12:28:57