Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何跟踪树遍历的进度?_Python_Storage_Tree Traversal - Fatal编程技术网

Python 如何跟踪树遍历的进度?

Python 如何跟踪树遍历的进度?,python,storage,tree-traversal,Python,Storage,Tree Traversal,我有一棵树。它有一个平底。我们只对最底部的叶子感兴趣,但这大概是底部有多少叶子 2 x 1600 x 1600 x 10 x 4 x 1600 x 10 x 4 那是13107200000000页?由于尺寸的原因(在每个叶子上执行的计算似乎不太可能优化到不到一秒钟),我已经放弃了访问每个叶子的想法 因此,我想我将构建一个“智能”叶子爬虫,它首先检查最“可能”的节点(基于周围节点的结果)。因此,我们可以合理地期望在相邻的分支/组中对叶片进行评估,但组的大小和分布会有所不同 记录哪些叶被访问和哪些叶

我有一棵树。它有一个平底。我们只对最底部的叶子感兴趣,但这大概是底部有多少叶子

2 x 1600 x 1600 x 10 x 4 x 1600 x 10 x 4

那是13107200000000页?由于尺寸的原因(在每个叶子上执行的计算似乎不太可能优化到不到一秒钟),我已经放弃了访问每个叶子的想法

因此,我想我将构建一个“智能”叶子爬虫,它首先检查最“可能”的节点(基于周围节点的结果)。因此,我们可以合理地期望在相邻的分支/组中对叶片进行评估,但组的大小和分布会有所不同


记录哪些叶被访问和哪些叶未被访问的最聪明的方法是什么?

似乎您正在寻找一种快速高效(就内存使用而言)的方法来进行成员资格测试。如果是这样的话,如果你能处理一些误报,那就试试看

底线是:在您的数据集非常大的情况下使用bloom过滤器,您所需要的只是检查数据集中是否存在特定的元素,并且可以容忍很小的误报机会

应该存在一些Python实现


希望这会有所帮助。

也许这太明显了,但您可以将结果存储在类似的树中。由于您的计算速度很慢,因此结果树不应过快失控。然后只需查找给定节点的结果。

您没有提供太多信息,但我建议调整搜索算法以帮助您跟踪所看到的内容。如果你有一个按“可能性”排列叶子的全局方法,你就不会有问题,因为你可以按可能性的降序访问叶子。但如果我没弄错的话,你只是在爬山,对吧?您可以通过搜索完整的子树(例如,选择为“可能”的簇中的所有1600 x 10 x 4叶),并跟踪簇而不是单个叶来减少存储需求

这听起来像是你的树几何是一致的,所以根据你的搜索工作方式,它应该很容易合并你的节点向上。。。e、 例如,跟踪其叶已全部检查的级别1节点,当级别2节点的所有子节点都在列表中时,删除子节点并保留其父节点。这可能也是选择检查内容的一个好方法:如果已检查了级别3节点的三个子节点,则第四个也是最后一个节点可能也值得检查


最后,一个想法:你真的,真的确定没有办法在小组中排除一些解决方案(不检查每个单独的解决方案)?像数独这样的问题有一个天文般大的搜索空间,但是一个好的蛮力解算器在不检查每个可能的9 x 9板的情况下消除了大量的可能性。考虑到问题的规模,这将是解决问题的最实际的方法

根据我的计算,即使我真的想出了一种方法,把它控制在每片叶子一位,我也需要1.5TB的存储。@JohnMee你要处理多少片叶子?我的想法是,结果树将只包含结果,而不为缺失的结果分配任何空间。