首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

求计算两个字符数组的值的交加的快速算法

2011-12-22 
求计算两个字符数组的值的交集的快速算法!求计算两个字符数组的值的交集的快速算法两个字符数组:数组都经

求计算两个字符数组的值的交集的快速算法!
求计算两个字符数组的值的交集的快速算法

两个字符数组:
数组都经过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里找,找到了就是一致的

热点排行