Zidani Mehdi Asked: 2022-06-18 01:52:50 +0800 CST2022-06-18 01:52:50 +0800 CST 2022-06-18 01:52:50 +0800 CST awk 如何处理 hashmap 中的冲突? 772 awk是使用单独的链接、开放寻址还是有自己的方式来处理哈希图中的冲突? 执行gawk并nawk实现相同的算法? 谢谢你。 awk associative-array 1 个回答 Voted Best Answer Paul_Pedant 2022-06-18T08:56:53+08:002022-06-18T08:56:53+08:00 检查https://www.gnu.org/software/gawk/manual/gawk.html#Other-Environment-Variables 这指定了两个“影响 gawk 行为方式”的环境变量。有一个警告,这些是供 gawk 开发人员用于测试和调整的,并且可能会发生变化。 INT_CHAIN_MAX 这指定了 gawk 将在散列链上维护的最大项目数,用于管理由整数索引的数组。 STR_CHAIN_MAX 这指定了 gawk 将在散列链上维护的最大项目数,用于管理由字符串索引的数组。 因此,gawk 似乎通过链接来自单个哈希的受影响的完整密钥来管理密钥哈希冲突。 目前尚不清楚当达到这个“最大值”时 gawk 会做什么,因为它不能轻易解决那个单一的链。从其他材料(我现在找不到)我怀疑这些最大值是整个数组的平均链长度:所以当超过平均值时,它可以分配一个更大的初始哈希,这将重新分配以前的冲突,然后重建所有的链条。 还知道“所有数组索引都是字符串”。而且,迭代由小整数索引的数组确实以数字顺序迭代(达到数千个数量级的限制)。Gawk 可能比预期的更具启发性。例如,它可以将每个数组作为小整数的直接索引查找,以及其他字符串的哈希。
检查https://www.gnu.org/software/gawk/manual/gawk.html#Other-Environment-Variables
这指定了两个“影响 gawk 行为方式”的环境变量。有一个警告,这些是供 gawk 开发人员用于测试和调整的,并且可能会发生变化。
INT_CHAIN_MAX
这指定了 gawk 将在散列链上维护的最大项目数,用于管理由整数索引的数组。
STR_CHAIN_MAX
这指定了 gawk 将在散列链上维护的最大项目数,用于管理由字符串索引的数组。
因此,gawk 似乎通过链接来自单个哈希的受影响的完整密钥来管理密钥哈希冲突。
目前尚不清楚当达到这个“最大值”时 gawk 会做什么,因为它不能轻易解决那个单一的链。从其他材料(我现在找不到)我怀疑这些最大值是整个数组的平均链长度:所以当超过平均值时,它可以分配一个更大的初始哈希,这将重新分配以前的冲突,然后重建所有的链条。
还知道“所有数组索引都是字符串”。而且,迭代由小整数索引的数组确实以数字顺序迭代(达到数千个数量级的限制)。Gawk 可能比预期的更具启发性。例如,它可以将每个数组作为小整数的直接索引查找,以及其他字符串的哈希。