python计算四元素组合算法_python – 算法,列表元素之间的最近点
這種方法是一種強力方法,但使用類似于Dijkstra算法的消除方法,這導(dǎo)致了更少的情況(使得算法最有可能快幾個數(shù)量級,特別是對于大型列表或大量列表).告訴我你是否理解它,我可以澄清一下.可以在此處找到實現(xiàn):https://github.com/nerryoob/closestPoint
你正在做的是列出不同的數(shù)字組合(即答案)?一開始最好(索引0),最后最差,反之亦然,看看效果最好.您將僅為第一個輸入列表創(chuàng)建結(jié)果列表,完全忽略其他列表.當(dāng)然,對于一個列表,所有項目都是解決方案 – 它們的總差異為0.所以只需將第一個輸入列表復(fù)制到結(jié)果列表中
接下來,可能使用while循環(huán),請遵循此算法.取最上面的項目并從結(jié)果列表中彈出它.存儲它的價值.轉(zhuǎn)到下一個輸入列表,對于下一個輸入列表中的每個項目,復(fù)制剛剛彈出的頂部項目,該項目還包含下一個輸入列表的項目.找到新的整體差異,并將基于此的新項目插入到列表中.重復(fù),直到頂級解決方案中包含所有列表.這意味著您保證您擁有最佳解決方案(至少是第一個),同時在組合上花費的時間少得多,這顯然不是解決方案
>示例(
括號中的數(shù)字是總差異)
[14,48]
[14,13,72]
[1,24]
結(jié)果列表為[14(0),22(0),36(0),48(0)]
>看看14.插入新數(shù)字[14和14(0),
48(0),14和23(9),14和30(16),14和72(58)]
>看看14& 14.插入新數(shù)字[22(0),48(0),14和
14和18(8),14和14和24(20),14
和14和1(26),14和72(58)]
>查看22.插入新數(shù)字[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)]
繼續(xù)重復(fù),你最終得到22,24.因為它包含所有n個列表,所以您可以停止并回復(fù)答案
要優(yōu)化它:
>刪除重復(fù)項
>也許以某種方式利用有序列表
>考慮一下您在哪里放置具有相同總差異的項目,也許首先有更多數(shù)字的項目
編輯:
算法復(fù)雜度為O(n ^ 2)
總結(jié)
以上是生活随笔為你收集整理的python计算四元素组合算法_python – 算法,列表元素之间的最近点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 伏尔加河上的线是谁画的啊?
- 下一篇: micropython stm32f10