假设您遇到以下问题。您有两个具有一对一映射的索引集。为了简单起见,假设您有一个数组,如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