我有一个关于 gist 的迭代搜索算法—— (或在此处查看完整的 github 存储库) ——在数万次迭代后会变慢。
概括:
- 从每个相邻点搜索最佳点
- 选择该点作为新点
- 如果该点是死胡同(即,每个相邻点都离期望的结果更远),那么它将该点添加到“禁止点”的哈希中以不再使用
- 该算法删除最近的点,并返回到点 n - 1
判断这些迭代何时以及如何变慢的最佳方法是什么?我正在考虑类似于“单圈时间”基准的东西,它可以让我绘制出我的代码的哪些部分正在增加成本。
从 切换Array#include?
到Hash#has_key?
已经将整个事情加快了许多数量级。但是随着禁用点的列表越来越长,会Hash#has_key?
开始滞后吗?我可以期待看到显着放缓的点是什么?
被禁止Hash
的点只是由 组成{"string rep. of array" => 1}
,因为我只是用它来搜索密钥。
谢谢你的帮助。