亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

高效的“序列對齊”,比較兩個集合列表以查找匹配項

高效的“序列對齊”,比較兩個集合列表以查找匹配項

莫回無 2022-09-06 21:29:14
我試圖比較兩個列表的集合(或列表列表),并且正在努力尋找有效的解決方案。給出的是兩個具有不同長度的列表,并且每個位置可能具有不同的大小集。集合的大小介于 1-6 個整數之間,列表的大小大約為 4000 個元素(較大的元素)和 100 個元素(較小的元素)。list_1= [{42, 189, 31}, {32, 75, 189}, {42, 31}, {100, 63}, {75, 37}] list_2=[{75, 37}, {42, 37}]然后,我想在數組中找到兩個列表之間重疊最大的點,并計算每個集合之間的交集有多少個元素。在這種情況下,最好的對齊方式是list_1[1:3],其中有兩個重疊的元素{32, 75, 189} 在 list_1 的索引 1 和 {75, 37} 在 list_2 的索引 0 與 {42, 31} 在 list_1 的索引 2 和 {42, 37} 在索引 1 的 list_2 給出計數 2,因為我們有兩個匹配項。對于上面的示例,輸出數組應如下所示sequence_alligenment(list_1,list_2): [0,2,0,1]列表的順序很重要,因為這樣,我試圖找到重疊最大的時間點。我一直在嘗試使用集合和凍結集的交集,但由于它們周圍有一些笨拙的for循環,所以沒有太多的運氣。
查看完整描述

3 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

這不是一個非常常見的問題。我認為最有效的方法是迭代。使代碼變得簡單是很簡單的。不是最有效的,但我沒有看到更好的解決方案。


查看完整回答
反對 回復 2022-09-06
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

如果你需要效率(如果你需要經常使用這個代碼,并且有時等待它),你可能會使用模糊匹配算法。

大多數模糊匹配算法似乎都針對字符串,但它們可能是一個起點。

如果這不是您要查找的內容,您可以嘗試執行反向索引,例如:{42: {42, 189, 31}, 189: {{42, 189, 31}}, 31: {42, 189, 31}, 32: {32, 75, 189}, 75: {32, 75, 189}, 189: {32, 75, 189}, 42: {42, 31}, 31: {42, 31}, 100: {100, 63}, 63: {100, 63}, 75: {75, 37}, 37: {75, 37: {75, 37}}

然后以這種方式計算在任何兩對之間得到的重復項數。我相信它會是O(n)那樣。


查看完整回答
反對 回復 2022-09-06
?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

查找 Smith-Waterman 算法。它是一種DP算法,用于局部對齊不同長度的序列。


查看完整回答
反對 回復 2022-09-06
  • 3 回答
  • 0 關注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號