Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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 哈希计算与bucket演练_Python_Algorithm_Optimization - Fatal编程技术网

Python 哈希计算与bucket演练

Python 哈希计算与bucket演练,python,algorithm,optimization,Python,Algorithm,Optimization,我在Python中有一个嵌套的类似r树的数据结构(列表列表)。钥匙是一个大数字(大约10位数字)。在每个级别上,列表中大约有x个项目(例如:10个)。然后在每个列表中,它递归并有x个项,以此类推。树的高度为h级(例如:5级)。每个级别还指示它包含的键的范围(如r-tree) 对于给定的键,我需要在树中找到相应的条目。这可以通过扫描每个级别来完成,检查给定的键是否在范围内。如果是这样,那么进入该层并递归,直到它到达叶子 这也可以通过将键依次除以x并将商作为列表索引来实现 所以问题是,什么更有效:按

我在Python中有一个嵌套的类似r树的数据结构(列表列表)。钥匙是一个大数字(大约10位数字)。在每个级别上,列表中大约有x个项目(例如:10个)。然后在每个列表中,它递归并有x个项,以此类推。树的高度为h级(例如:5级)。每个级别还指示它包含的键的范围(如r-tree)

对于给定的键,我需要在树中找到相应的条目。这可以通过扫描每个级别来完成,检查给定的键是否在范围内。如果是这样,那么进入该层并递归,直到它到达叶子

这也可以通过将键依次除以x并将商作为列表索引来实现

所以问题是,什么更有效:按顺序遍历列表(复杂度=深度*x(例如:50))或将大数依次除以x以获得实际的列表索引(复杂度=h个分区(例如:5个分区))

(即)50个范围检查或5个分区


这需要可伸缩性。所以,如果大量用户在云中访问这些代码,那么什么是高效的呢?在规模上执行除法可能比范围检查更昂贵?

您需要在某种现实场景中对代码进行基准测试

之所以很难说,是因为您不仅仅是在比较除法(顺便说一句,现代编译器使用大量技巧来避免除法)。在现代CPU上,您拥有大型缓存,因此列表很可能适合L2或L3,从而大大减少了运行时间。还有一些奇特的vector/SIMD指令,可以用来加速线性情况下的所有检查

我猜按顺序浏览列表会更快,另外代码也会更简单


但不要相信我的话,拿一个真实的例子,对这两个版本进行基准测试,并根据结果进行选择。尤其是在这对系统性能至关重要的情况下。

如果除法真正起作用,它会快得多。但它真的有效吗?仅当每个内部列表正好有x个项目时。