我想编写一个平均绘制表面( // If there is a value in the session, then increment it.
if(isset($_SESSION['counter'])) {
$_SESSION['counter'] = $_SESSION['counter'] + 1;
} else {
$_SESSION['counter'] = 1;
}
// Now, use the value which you have set.
<?php echo '<a href = "#section'.($_SESSION['counter']).'">'.'Next Section'.'</a>';?>
)的程序。我此刻已经有了一个方法,但它还没有完成,而且速度也很慢。由于这种方法太慢,我不想进一步追求它。
开始时始终存在第一个点和最后一个点 - 因此X * Y
区域位于10 x 10
处,像素位于0
处。
然后必须找到下一个最佳像素,即具有最大距离的像素。这只相对容易,只有两点 - 99
所以(99 - 0 / 2)
或49
。
现在你必须再次寻找下一个最好的。因此48
或48 {是(49 - 0) / 2
之前(99 - 48) / 2
/ 24
或25
/ 74
。{/ p>
必须重复此过程,直到找到正确的序列。
75
我还在这里添加了一个小例子,它展示了它应该如何工作。函数0,99,49,74,24,36,61,86,12,42,67,92,6,18,30,55,80,45,70,95,3,9,15,21,27,33,39,52,58,64,77,83,89,47,72,97,1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,50,53,56,59,62,65,68,75,78,81,84,87,90,93,2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,46,48,51,54,57,60,63,66,69,71,73,76,79,82,85,88,91,94,96,98
应该用数学表达式代替,以获得最快的解决方案。
getElementOrder
有没有解决这个问题的数学方法? 欢迎您在此处发布更好的解决方案,方法或链接到此问题的数学公式。
答案 0 :(得分:0)
我认为我得到了你想要完成的事情,以及基本的例程。我看待它的方式,你可能会过度复杂化找到最大距离的问题,因为从我所看到的情况来看,你基本上做的就是将日益精细的间隔减半。 / p>
所以,这是我的版本:
function getElementOrder(width, height) {
const length = width * height;
const order = [ 0 ];
for (let denominator = 2; order.length < length; denominator *= 2) {
for (let enumerator = 1; enumerator < denominator; enumerator += 2) {
order.push(Math.round(length * enumerator / denominator));
}
}
return order;
}
我使用非常长而笨重的变量名来使其背后的原理更加清晰:如果您将[0, width*height]
的整个时间间隔预测到[0, 1]
的间隔,那么您可以使用它。重新加入1/2,然后是1/4和3/4,然后是1/8和3/8以及5/8和7/8,依此类推;每次将分母乘以2,并取所有奇数倍。
(附录:你可以通过对结果使用固定长度的TypedArray
并按索引添加元素而不是使用.push()
来挤出更好的性能。我只是没有&#39 ; t想要用附加的循环变量等模糊解决方案的要点。)