|
楼主 |
发表于 2018-4-11 11:00
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 Zamyi 于 2018-4-11 14:58 编辑
很好!但你是学导,计算机专业,但请不要这种语气对待其他童鞋!
有几点请教:
1、21楼说需解决碰撞,1楼不是说了三个方法吗?何谓碰撞?即是不同字符串取得相同的H值。下面做了一个最极端的测试,所有的关键字的H值都取0,结果也可以找到。
- Sub test()
- Dim H_t() As Long, C As Long, bC As Long, H As Long, Seed As Single
- Dim a(), n&, i&, mm&
- n = 10
- bC = 1.5 * n
- ReDim H_t(bC - 1)
- ReDim a(1 To n, 1 To 2)
- Seed = Rnd
- For i = 1 To n
- S = Format(Int(n * Rnd), "AB00000")
- H = 0 '(hash(0, StrPtr(s), LenB(s)) And &H7FFFFFFF) Mod bC
- r = Rnd(Seed)
- Do
- If H_t(H) = 0 Then
- C = C + 1
- H_t(H) = C
- a(C, 1) = S
- Exit Do
- End If
- If StrComp(S, a(H_t(H), 1)) = 0 Then Exit Do
- mm = mm + 1
- H = (H + bC * Rnd) Mod bC
- Loop
- Next
- MsgBox 1 + mm / C & " " & C
- End Sub
复制代码
2、23楼说哈希表的尺寸最好是一个质数,我理解这仅仅指用定长方法改变H值有用,其他方法没有多少作用。
3、这里谈论的VB,什么链表,VB能有吗?不管怎么说,不管Microsoft的字典是用什么写的,但它没我写的速度快,内存也不见得能省多少,这就足够了。 |
|