Algorithm 查找大小为k的子序列,使值之间的最小距离最大
假设我有一个随机序列(排序数组),其中包含n正浮点。 如何找到大小为k的子序列,以使子序列中所有浮点对之间的最小距离最大化,我的意思是它们处于最远的距离 注意:序列的子序列是序列元素的有序子集,与原始序列具有相同的顺序 约束Algorithm 查找大小为k的子序列,使值之间的最小距离最大,algorithm,optimization,dynamic-programming,approximation,np-hard,Algorithm,Optimization,Dynamic Programming,Approximation,Np Hard,假设我有一个随机序列(排序数组),其中包含n正浮点。 如何找到大小为k的子序列,以使子序列中所有浮点对之间的最小距离最大化,我的意思是它们处于最远的距离 注意:序列的子序列是序列元素的有序子集,与原始序列具有相同的顺序 约束 n>10^5 n>k>2 示例: 序列a[]={1.1,2.34,6.71,7.01,10.71}和k=3, 子序列={1.1,6.71,10.71},10.71和6.71之间的最小距离为4 错误的子序列: {1.1,7.01,10.71},最小距离为3.7 {1.1,2.
我想纠正动态规划的解决方案,虽然我知道可以通过对x进行二进制搜索来找到x,但通过排序,我的顺序松散且耗时(O(n^2)。我如何克服这个问题?如果有一个解决方案涉及排序,首先要将数组映射到元组数组,元组数组包含元素的值和位置。现在,当您对数组进行排序时,您也知道了原始位置 然而,我不相信分类最终会对你有所帮助
我看到的有效方法是针对每个
0 OK。。。这是一个很好的建议……但是,它很耗时……我想要一个O(n)等级的贪婪算法。这个解决方案是O(kn^2)
。通过大量的工作,可以将其归结为O(kn log(n))
。但我建议在你首先找到一个有效的解决方案之前不要尝试优化它。@IrajShokouhiBahar确保你确实看到了评论。作为记录,我开始试图解释如何加速,但很快发现解释起来很复杂。编写代码将更加复杂。我建议你不要这样。好的。。。你有什么建议?@IrajShokouhiBahar试着按照我描述的思路找到一个解决方案。显然,使用更多类似C的数据结构(如结构数组)而不是JSON。
[
{"index": 0, "value": 1.1},
{"index": 1, "value": 2.34,
"seq": {2: {"dist": 1.34, "prev": 0}},
{"index": 2, "value": 6.71,
"seq": {2: {"dist": 5.61, "prev": 0},
3: {"dist": 1.34, "prev": 1}},
{"index": 3, "value": 7.01,
"seq": {2: {"dist": 5.91, "prev": 0},
3: {"dist": 1.34, "prev": 1}},
{"index": 4, "value": 10.71,
"seq": {2: {"dist": 9.61, "prev": 0},
3: {"dist": 4, "prev": 2}}
]