chapter_hashing/hash_collision/ #89
Replies: 97 comments 132 replies
-
大佬,为什么这一页看不见图啊。 |
Beta Was this translation helpful? Give feedback.
-
而实际上,往往存在不同 key 对应相同 value 的情况, 这里的描述是不是容易引起歧义,应该是不同的key会产生相同的哈希值,而导致出现的问题 |
Beta Was this translation helpful? Give feedback.
-
大佬你好,我不理解为什么哈希扩容也能解决哈希冲突。 |
Beta Was this translation helpful? Give feedback.
-
你好,冲突处理这一块没有代码实现吗?只需要知道这个结论就好了吗 |
Beta Was this translation helpful? Give feedback.
-
大佬您好,请问链式地址插入元素那里,“再将结点(即键值对)添加到链表头部即可”,为什么要插入到头部呢?尾部不可以吗?插入到链表的尾部,不是保证链表的顺序与插入顺序一致吗? |
Beta Was this translation helpful? Give feedback.
-
你好,线性探测中:“查找元素:若出现哈希冲突“。这里没太明白查找元素的时候怎么会出现冲突呢? 输入一个key哈希函数的结果不是只有一个吗?!是插入的时候会把数组(桶)中已存在的的key的hash结果缓存,然后查找的时候先对比有冲突吗? |
Beta Was this translation helpful? Give feedback.
-
请问哈希函数一般怎么设计,比如多次哈希方法中,每个函数有什么设计思路嘛?会不会遇到一个插入操作,针对这个key所有哈希函数都冲突了情况呢? |
Beta Was this translation helpful? Give feedback.
-
开头可以简单补充一下什么是桶,要不萌新很迷惑,我就是萌新。谢谢大佬 |
Beta Was this translation helpful? Give feedback.
-
大佬好(●'◡'●)。请问多次哈希应该也会有不能直接删除元素的缺陷吧?另外对于标记已删除的空间,这个空间还能再次使用吗? |
Beta Was this translation helpful? Give feedback.
-
线性探测标志位是指DEFUNCT object吗?后续会更新Cockoo Hashing吗,这个也挺常见的。 |
Beta Was this translation helpful? Give feedback.
-
请问在“hash_map_chaining.cpp”中的remove函数中:
之所以需要第一行和第三行的原因是不是因为vector在创建的时候是申请的动态内存?所以在这里需要delete掉,对于STL不是很熟悉,希望能得到解答 |
Beta Was this translation helpful? Give feedback.
-
链式地址哈希表 扩容部分没懂 标记一下下次看 |
Beta Was this translation helpful? Give feedback.
-
HashMapChaining 的扩容方法 extend 好像有点问题,似乎没有考虑到相同 key 在扩容后对应的实际 index 会发生改变 |
Beta Was this translation helpful? Give feedback.
-
请问在 “hash_map_chaining.cpp” 的 extend() 函数中为什么将键值对从原哈希表搬运至新哈希表需要delete pair,这里的pair不是属于临时哈希表中的数据吗,它难道不是随代码块持续性的嘛,不太懂这个。 |
Beta Was this translation helpful? Give feedback.
-
您好,在Java示例中,这样这样遍历 list 过程中删除 list 的元素,是可能会报错 ConcurrentModificationException 异常的(当删除的是 list 的最后一个元素时),可以使用迭代器 iterator 删除。 |
Beta Was this translation helpful? Give feedback.
-
/**
/
} |
Beta Was this translation helpful? Give feedback.
-
请问下,上面说到线性探测方法的查找元素的情况: 在插入元素时如果发现对应的桶已经有值,则向后插入,那么在查找元素时,是怎么知道这个元素有哈希冲突的呢? |
Beta Was this translation helpful? Give feedback.
-
桶里面不是光存一个值的,是存储一个键值对对象,把要查找的键和桶里存储的键比较一下不一致就说明冲突了要继续查找
| |
谈惟强
|
|
***@***.***
|
---- Replied Message ----
| From | ***@***.***> |
| Date | 9/20/2024 16:43 |
| To | ***@***.***> |
| Cc | ***@***.***> ,
***@***.***> |
| Subject | Re: [krahets/hello-algo] chapter_hashing/hash_collision/ (Discussion #89) |
请问下,上面说到线性探测方法的查找元素的情况:
查找元素:若发现哈希冲突,则使用相同步长向后进行线性遍历,直到找到对应元素,返回 value 即可;如果遇到空桶,说明目标元素不在哈希表中,返回 None 。
在插入元素时如果发现对应的桶已经有值,则向后插入,那么在查找元素时,是怎么知道这个元素有哈希冲突的呢?
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you commented.Message ID: ***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
链式地址也叫拉链法:多个元素通过链表的形式“拉”在一起,形成一条“链子” |
Beta Was this translation helpful? Give feedback.
-
能否讲讲开放寻址在访问元素时是怎么处理的?查找元素是已知键也已知值才能够这样做,但是访问元素的时候常常是不知道值,只知道键。 |
Beta Was this translation helpful? Give feedback.
-
/* 析构方法 */ |
Beta Was this translation helpful? Give feedback.
-
链式地址法的遍历,有些桶可能是空的,所以可以在外层循环(遍历桶)判断该链表不为空,再进行内层循环(遍历链表),以免在本桶为空时还要操作和打印 def print(self):
for bucket in self.buckets:
if not bucket:
continue
res = []
for pair in bucket:
res.append(f'{pair.key} -> {pair.val}')
print(res) |
Beta Was this translation helpful? Give feedback.
-
也可用
// for (int i = 0; i < map->capacity; i++)
// map->buckets[i] = NULL;
memset(map->buckets, 0, map->capacity * sizeof(Node*)); |
Beta Was this translation helpful? Give feedback.
-
数据库中标记记录被删除,而不是真的将其从存储中移除,也被称为“懒删除”。除了在数据结构方面提高操作效率外,在某些应用场景中也方便进行数据恢复或审计。 |
Beta Was this translation helpful? Give feedback.
-
最后一小节关于 JDK 1.8 中链表转红黑树的链表长度表述不准确。应该数组长度达到64(源码中是 <64)且链表长度超过 8,即元素个数达到 9 个时,才会转红黑树。文中链表长度达到 8 个是不对的 |
Beta Was this translation helpful? Give feedback.
-
在hash_map_open_addressing.java中在 findBucket 方法中,循环的跳出条件是遇到空桶 (buckets[index] == null)。然而,由于 TOMBSTONE 不计入 size,在哈希表大量使用删除标记后,表中可能会没有任何空桶,即所有桶都被占用或被标记为 TOMBSTONE。如果在这种情况下插入新的键值对,findBucket 将会一直循环,因为没有空桶供跳出。 |
Beta Was this translation helpful? Give feedback.
-
在hash_map_chaining.c添加操作 |
Beta Was this translation helpful? Give feedback.
-
在 hash_map_open_addressing.cpp 中: |
Beta Was this translation helpful? Give feedback.
-
first_tombstone = -1 |
Beta Was this translation helpful? Give feedback.
-
chapter_hashing/hash_collision/
动画图解、一键运行的数据结构与算法教程
https://www.hello-algo.com/chapter_hashing/hash_collision/
Beta Was this translation helpful? Give feedback.
All reactions