有数组 A:[1,2,3]
在数组 B
[ [1,1,1], [1,2,1], [1,3,1], [1,2,3], ]
中找出最符合的子数组[1,2,3]
若是不存在[1,2,3],则找出任一[1,2,*]
同理,若是不存在[1,2*],则找出任一[1,*,*]
类似 如果我想在数组 B 中找出最符合数组 A[1,2,3,4....,n]的子数组
![]() | 1 ViggoSite 2019-11-14 13:36:55 +08:00 ![]() 最简单的办法: foreach 遍历 “数组 B” ,计算与 "数组 A" 元素匹配的相似度,并记录 “数组 B” 中相似度最大的元素下标 。 |
2 hakono 2019-11-14 18:48:10 +08:00 via iPhone 第一轮按照 [0][0] [1][0] [2][0] [n][0] 的顺序循环,获取到所有符合最低限度条件[1,*,*]的数组下标并记录 然后接着遍历 [0][1] [1][1] [2][1] [n][1] 选出下符合下一次 [1,2*] 的所有下标并记录,用任何后入先出的数据借口存就行 然后一层层循环直到记录 最后一次找出的就是你需要的下标们 |
3 hakono 2019-11-14 18:50:09 +08:00 via iPhone 打字错误 修正 选出下符合下一次 [1,2*] 的所有下标并记录,用任何后入先出的数据结构存就行,因为你需要的是最后一次保存的数组下标 然后一层层循环直到结束遍历 在那个后入先出的数据结构中,最后一次保存的下标们就是你需要的数据了 |
4 hakono 2019-11-14 18:57:46 +08:00 via iPhone ![]() 再次补充,电车打字思绪一下没整理好。。。 第一次你需要遍历 [0][0] [1][0] [2][0] [n][0] 选出符合最低匹配条件的所有下标 a1 a2 ~ an 然后第二次开始你就只需要在上一次匹配到的下标中匹配下一次的 [a1][1] [a2][1] [a3][1] [an][1] 之后的匹配以此类推 |
![]() | 5 anteros 2019-11-14 19:03:51 +08:00 ![]() 1.将 B 数组内的数组重新进行排序。 2.将 A 数组进行排序。 3.循环,用找比较差集或者交集,返回的个数,进行比较。(例,交集的话,返回的数量越多,那么相似度越高)。 |
8 Fangfang2019 2019-11-14 21:38:38 +08:00 via Android ![]() 把一行当成一个整数,和数组 A 作差,取绝对值,最小的那个,也一定是位数最小的那个,就是最符合的, |
9 sdcxccy 2019-11-14 21:59:07 +08:00 用 B-A,有三个 0 的就是最符合的,两个 0 的其次,以此类推 |
![]() | 10 micookie 2019-11-20 18:12:43 +08:00 via Android 把 a 数组转为 123 字符串 b 数组,转为['111', '121'....]一维字符串数组 然后去循环匹配,倒也是一种思路。 |