假设我有四个组
A [ 0, 4, 9]
B [ 2, 6, 11]
C [ 3, 8, 13]
D [ 7, 12 ]
现在我需要每组(即一个新组)E [num of A,num of B, num of C, num of D]中的一个数字,这样E中的最大num和E中的最小num之间的差应该是可能最低。这是什么类型的问题?哪种图算法能更好地解决此类问题?
提前致谢。
P.S:我正在尝试用 java 解决这个问题,对于未指定的标题感到抱歉。
编辑 :
终于我找到了我真正想要的东西http://rcrezende.blogspot.in/2010/08/smallest-relevant-text-snippet-for.html http://rcrezende.blogspot.in/2010/08/smallest-relevant-text-snippet-for.html
- 将每个组的内容合并到一个数组中。数组的每个元素应该是一对(数字,组名称)。
- 按数字对该数组进行排序。
- 一个接一个地推进两个迭代器。当并非每个组的元素都位于这些迭代器之间时,移动第一个迭代器。当这些迭代器之间存在每个组的元素时,移动第二个迭代器。详情请参阅这个问题 https://stackoverflow.com/q/9775301/1009831.
- 迭代器之间的最小距离决定了最佳结果组(当同一组中有多个代表时,您只需要删除不需要的元素)。
其他算法:
- 对每个组的元素进行排序(如果尚未排序)。
- 将每个组的最小元素的一对(数字,组名称)放入优先级队列(最小堆,优先级=数字)。
- 从队列中删除最小的元素,并将其替换为同一组中的下一个元素。
- 重复步骤3,直到某个组中不再有元素为止。计算每次迭代的 max(queue) - min(queue),如果它小于任何先前的值,则更新迄今为止最好的结果组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)