我怀疑在PHP中实现这个算法。我有几个地址范围(或范围)。地址范围的大小会有所不同(如图所示)。现在,我有一个关键因素。我需要找到关键元素所在的地址绑定。
我目前正在使用多个if语句进行比较,添加绑定长度。我相信,有一种更好的方法可以做到这一点。知道如何实施它。
我不是在寻找代码(即使它有帮助:))。关于如何实施它的想法会有所帮助。
答案 0 :(得分:1)
一种完成这项工作的方法是定义一个包含边界的二维数组:
<?php
$bounds = array();
$bounds[0] = array(1, 1, 1);
$bounds[1] = array(1, 1, 1, 1, 1);
$bounds[2] = array(1, 1, 1);
// ...
?>
另一个包含绑定索引的数组,具体取决于键:
<?php
$indexes = array(0, 0, 0,
1, 1, 1, 1, 1,
2, 2, 2,
3, 3, 3, 3,
4);
?>
然后,假设$key = 10
,$bounds[$indexes[$key]]
引用$bounds[2]
array(1, 1, 1);
您在这里复制数据,但这是O(1)
算法。
另一种方式(如果你不操纵 ton 数据,最好的方法),而不重复数据(但O(n)
复杂度),是浏览$bounds
数组:
<?php
for($key = 10, $i = 0; $key >= 0; $key -= count($bounds[$i]), ++$i);
?>
此处$bounds[$i-1]
指的是$bounds[2]
。