假設您遇到以下問題。您有兩個具有一對一映射的索引集。爲了簡單起見,假設您有一個數組,如int a [] = {21, 30, 45, 78}
這個列表將{1,2,3,4}映射到{21,30,45,78}。什麼是獲得反向映射的最有效方式,即給定索引30
,如果想要算法返回2
,則需要45
,您需要3
等等。我可以想到以下內容:索引映射的高效算法
索引的二進制搜索。這是有效的內存,並且具有複雜性
O(log n)
。有一個數組有
79
元素,並有reverseMap[21] = 1, reverseMap[30] = 2, reverseMap[45] = 3, reverseMap[78] = 4
。這是O(1)
,因此速度更快,但不是有效的內存。
對於我的應用程序來說,內存和速度都很重要。我缺乏記憶,因爲這是一個數字處理代碼,因此可以使用數億個點。速度也很重要,因爲算法會被調用很多次。
我覺得哈希表在這裏很有用,但我不太瞭解它的評論。我希望對這個問題有所瞭解。此外,由於編碼是在c++
完成的,我希望看到使用STL
而不是外部庫的方法。
這功課嗎? – 2012-02-24 20:22:39
@LightnessRacesin不是真的 - 只是正在進行的項目中的一部分。我有一個解決方案,但什麼要知道別人的想法 – GradGuy 2012-02-24 20:23:49
然後,我相信你正在尋找http://codereview.stackexchange.com – 2012-02-24 20:24:20