(不是作业)
我有一个包含重复元素的列表:A B C B A D C B
我想要每两个无序元素之间的最短距离:
(A B): 1
(A C): 2
(A D): 1
(B C): 1
(B D): 2
(C D): 1
我可以提高当前实施的复杂性吗?元素是单词,搜索空间是段落,所以我希望在长度为200的列表中有~100个唯一元素。
我的实施:
pairs <= map(pair, distance)
For each unique element 'me'
1. \ For each index 'o' of me in list
2. \ For each 'item' at index 'i' in the list
| if (item == me) skip
| pair <= sort(me, item)
| distance <= abs(i - o)
| existing <= dist(pair in pairs), or infinity
\ if (distance < existing) pairs <= (pair, distance)
我不喜欢它,因为
O(u•n)
搜索索引唯一商品的出现次数O(u•o•(n-o))
u
且o
为唯一商品及其出现次数使用示例文本blob&#39; s:
74500
检查事件250000
跳过比较247582
排序对,哈希,从地图获取,比较答案 0 :(得分:1)
这是一种更简单,更快速的算法。假设列表在数组X []:
中这具有空间复杂度O(u ^ 2),这是最小的,时间复杂度O(u ^ 2 + un),我怀疑它也是最小的。
[编辑:根据要求,我们现在仅报告“任一方向”中的一对元素之间的最小距离,而不是在两个方向上单独分开。在n <1的情况下,还向时间复杂度添加了u ^ 2项。你,虽然听起来我们保证n&gt; = u来自潜在的问题。]