求计算两个字符数组的值的交集的快速算法!
求计算两个字符数组的值的交集的快速算法
两个字符数组:
数组都经过Sort排序,求两个数组都有的某些值,放入一个新数组。
数组A:
arrayA(1)= "abcd "
arrayA(2)= "bdbf "
arrayA(3)= "cdefg "
arrayA(4)= "fgddd "
数组B:
arrayB(1)= "abcde "
arrayB(2)= "cdefg "
arrayB(3)= "dfghjkjk "
arrayB(4)= "fgddd "
arrayB(5)= "hhhhhhhhhhh "
两个数组的交集放入数组C
arrayC(1)= "cdefg "
求快速算法!
我目前的办法:
for i as integer =0 to arrayA.getupbound(0)
if Array.binarySearch(arrayB,arrayA(i))> =0 then
‘加入到ArrayC
endif
next
虽然利用binarySearch快速搜索,但是需要计算的量大,效率还不满意。
求高效率的算法。
[解决办法]
还有一个折半查找,你可以试试,不过写程序太慢
[解决办法]
有一种方法,把数组的每一个元素MD5加密,然后转换成正整数,然后再比较就快多了
[解决办法]
Dim arrayA(4) As String
Dim arrayB(5) As String
Dim arrayC(5) As String
arrayA(0) = "abcd "
arrayA(1) = "bdbf "
arrayA(2) = "cdefg "
arrayA(3) = "fgddd "
arrayB(0) = "abcde "
arrayB(1) = "cdefg "
arrayB(2) = "dfghjkjk "
arrayB(3) = "fgddd "
arrayB(4) = "hhhhhhhhhhh "
Dim i As Integer
Dim j As Integer
Dim k As Integer
k = 0
While (i < 4 And j < 5)
If arrayA(i) < arrayB(j) Then
i += 1
ElseIf arrayA(i) > arrayB(j) Then
j += 1
Else
arrayC(k) = arrayA(i)
i += 1
j += 1
k += 1
End If
End While
数组里的下标,你自己定,我是举了个例子,已经排好的顺序的数组间交叉比较,
我觉得这样的比较,算法效率是最高的,我已经试过了
[解决办法]
楼上应该算正解了
[解决办法]
把ArrayA的每个元素都放到一个Hashtable里,key就用hascode就可以
用ArrayB的每个元素的hashcode去Hashtable里找,找到了就是一致的