python计算四元素组合算法_python – 算法,列表元素之间的最近点

这种方法是一种强力方法,但使用类似于Dijkstra算法的消除方法,这导致了更少的情况(使得算法最有可能快几个数量级,特别是对于大型列表或大量列表).告诉我你是否理解它,我可以澄清一下.可以在此处找到实现:https://github.com/nerryoob/closestPoint

你正在做的是列出不同的数字组合(即答案)?一开始最好(索引0),最后最差,反之亦然,看看效果最好.您将仅为第一个输入列表创建结果列表,完全忽略其他列表.当然,对于一个列表,所有项目都是解决方案 – 它们的总差异为0.所以只需将第一个输入列表复制到结果列表中

接下来,可能使用while循环,请遵循此算法.取最上面的项目并从结果列表中弹出它.存储它的价值.转到下一个输入列表,对于下一个输入列表中的每个项目,复制刚刚弹出的顶部项目,该项目还包含下一个输入列表的项目.找到新的整体差异,并将基于此的新项目插入到列表中.重复,直到顶级解决方案中包含所有列表.这意味着您保证您拥有最佳解决方案(至少是第一个),同时在组合上花费的时间少得多,这显然不是解决方案

>示例(

括号中的数字是总差异)

[14,48]

[14,13,72]

[1,24]

结果列表为[14(0),22(0),36(0),48(0)]

>看看14.插入新数字[14和14(0),

48(0),14和23(9),14和30(16),14和72(58)]

>看看14& 14.插入新数字[22(0),48(0),14和

14和18(8),14和14和24(20),14

和14和1(26),14和72(58)]

>查看22.插入新数字[36(0),22和23(1),14

和14和18(8),22和14(8),22和30(8),14和30

(16),14和14和1(26),22和72(50),14

和72(58)]

继续重复,你最终得到22,24.因为它包含所有n个列表,所以您可以停止并回复答案

要优化它:

>删除重复项

>也许以某种方式利用有序列表

>考虑一下您在哪里放置具有相同总差异的项目,也许首先有更多数字的项目

编辑:

算法复杂度为O(n ^ 2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值