转换为树之前的关联列表有多大

时间:2014-02-01 21:18:57

标签: haskell data-structures

我正在为haskell中的翻译器实现一个符号表。我的问题是,在从关联列表转换为trie / map / hashmap之前,表应该在平均用例上有多大,假设我的键是小字符串或字节串?我不想使用哈希表,因为从io Monad中解包似乎在效率方面倒退了一步(在这里插入haskell效率笑话:))

编辑:打开关于哈希表的评论。根据最近的实施,它们与其他选项一样好。

1 个答案:

答案 0 :(得分:3)

我认为你应该总是*使用(哈希)地图来做任何事情而不仅仅是一个快速的脚本。

第一个参数,使用设计点中的最佳数据类型。地图缩放到更大的尺寸。即使对于规模较小的关联列表,如果它实际上同样快,也不会让我感到惊讶(并且几乎可以预期)。这种感觉背后的原因来自于1Set使用nub,他们发现即使是小型列表,它也不会慢。此外,Maps还有一些与它们相关的有用功能,可用于操作它们。对于它们不存在的列表,或者您必须自己编写它们(它们可能不会那么快)。

第二个论点,如果不需要,不要优化。正如kqr在他对你的回答的评论中指出的那样,在有证据表明你需要它之​​前不要进行优化(并且你真的需要优化这个列表/地图)。要记住这一点的问题是这样一个小字典发生的频率是多少?那么它是否会为你的节目总时间贡献很多时间。或者执行是否已经很小,以至于没有明显的差异?

*:我现在能想到的一个例外是你想创建一个无限的关联列表。

P.S。有关列表(和公司政策)可能出现问题的好文章,请参阅http://thedailywtf.com/Articles/Coding-Practices-MUST-Be-Followed.aspx