【问题标题】:Time complexity of associative arrays in shell scriptsshell脚本中关联数组的时间复杂度
【发布时间】:2011-04-18 23:38:00
【问题描述】:

我想知道在 shell 脚本中使用关联数组时是如何构造/实现的。

另外,我想知道基于 shell 脚本的关联数组的时间复杂度是否最佳,因为我们可以使用字母和数字作为它们各自的键。

编辑:他们使用什么哈希函数??

【问题讨论】:

  • 以 ksh 为例。准确地说是 ksh93 .. 这是一个非常笼统的问题,我想问所有的 shell
  • 你不能要求它提供“所有外壳”——它是特定于实现的。
  • @Brian:好的,那样的话我想具体了解一下ksh93。

标签: algorithm shell scripting associative-array time-complexity


【解决方案1】:

如果您使用的是关联数组,则不是通过“使用字母和数字作为它们各自的键”来访问它;您正在使用字符串 - 任何数字都是字符表示,而不是实际索引。

除了查看源代码之外,我找不到任何具体的东西,但大多数情况下,它似乎在内部实现为哈希表(而不是树),因此您的访问和插入平均时间将是 O( 1)。没有变得更优化。

【讨论】:

  • @Brian:那么查找函数如何处理字符串。假设其中一个键是“我是查找键”,另一个键是“我是另一个查找键”。内部数据结构如何容纳这么大的字符串?其次,字符串大小有限制吗?
  • 您可能想阅读hash table 上的 wiki 条目以了解其工作原理。至于密钥的长度,那将是 ksh93 特有的,我找不到任何列出它的东西。我会想象相当长的时间,它可能会截断任何太长的东西。
  • @Brian:非常感谢您的帮助。我熟悉有表,我正在尝试查找 Solaris 中的关联数组实现。我真的不知道在哪里寻找它。这就是我将这个问题放在 StackOverflow 中的原因。我试图找到开发人员用来将密钥映射到其各自内存位置的哈希函数。再次感谢
  • 我用谷歌搜索了一遍,没有运气。最好的方法是下载 ksh 的源代码并查看它。它现在可用,kornshell.com/software
  • 回答您的第一个问题(抱歉,我错过了) - 它不存储字符串,因此它不必容纳任何东西。它只是对字符串进行哈希处理以获得数组范围内的数字结果。他们确实说一个数组被限制为 4096 个项目,所以散列算法会吐出 0 到 4095 之间的东西
猜你喜欢
  • 2010-10-15
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
  • 2015-04-23
  • 1970-01-01
相关资源
最近更新 更多