【问题标题】:Alternative to Hash Map for Small Data set in CC 中小数据集的哈希映射的替代方案
【发布时间】:2011-11-16 16:27:24
【问题描述】:

我目前正在为particle simulator 开发命令行界面。它的解析器采用以下格式读取输入:

[命令] [参数]* (-[标志] [标志参数])

目前,命令是通过条件块发送的,与各种已知命令相比,其对应的数据包被发送到匹配函数。然而,这似乎笨重、低效和不优雅。

我正在考虑改用哈希图,将命令的字符串表示形式作为键,将函数指针作为值。引用的函数将被发送一个包含参数、标志等的数据包。

在这种情况下,哈希映射是否过大?实施一个所需的额外基础设施是否超过了潜在的好处?我的目标是速度、优雅、功能,并且,因为这是一个开源项目,所以是可扩展性。

感谢您的帮助。

【问题讨论】:

  • 也许一个有序的地图就足够了,因为你可能不会有数百万的案例或在一个紧密的循环中调用解析器。但是,由于这些都不是完全可以编写的,因此可能选择了您的编译器已经提供的结构。
  • 我认为你必须记住,参数只在启动时评估,你没有机会让它成为速度的瓶颈。哈希图似乎是一个足够优雅的解决方案......

标签: c performance hashmap


【解决方案1】:

您可能需要考虑Ternary Search Tree。性能好,存储利用率高;而且您不需要哈希函数或碰撞策略。

链接的 Bentley/Sedgwick 文章是对随附 C 源代码的非常透彻但可读的解释。

在我的 postscript 解释器的过去 3 个版本中,我一直在使用 TST 进行名称查找。唯一需要的更改是由于内存管理的更改。 Here's a version 我(轻轻地)修改为使用显式指针。我在我的postscript interpreter 中使用了另一个版本,任何 xpost2*.zip 版本,在文件 core.c 中,它使用字节偏移作为指针(必须添加到用户内存字节指针以产生真正的指针)。

【讨论】:

    【解决方案2】:

    获得的速度可能会很小,但您可以散列命令将其转换为数字,然后使用 switch 语句。比哈希映射更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多