0

我想找到一个索引,使 ax^2 数组中的是/否问题的可能性降低,为此我假设一个很酷的方法是通过在一半(或一半附近)切割并is col <= half?根据询问来找到 col 位置回答,我将选择其中一个并重复此操作直到length == 1,然后进行相同操作,但is row <= half?要找到该行。

这是我的函数(第一次尝试递归函数):

function recursiveFunc(indexPos, currentArrLen, moveIndexBy, countLoops){
    var aproxHalf, relativeIndexPos;

    relativeIndexPos = (indexPos-moveIndexBy);
    aproxHalf = Math.floor(currentArrLen/2);

    if(currentArrLen<2){
        return (moveIndexBy+" "+countLoops);
    }else{
        countLoops++;

        if(relativeIndexPos>=aproxHalf){
            moveIndexBy += aproxHalf;
            currentArrLen -= aproxHalf;
        }else{
            currentArrLen = (aproxHalf-moveIndexBy);
        }

        return recursiveFunc(indexPos, currentArrLen, moveIndexBy, countLoops);
    }
}

唯一看起来无法自我解释的 var 可能是relativeIndexPos,所以我将解释它,它的值是我们试图找到的索引的索引,但仅在较小的数组中(例如,如果我们有 5x5 查找索引 2,则新的切割一次后的数组长度为3,该数组中2的相对索引[0,1][<2>,3,4]为0)

编辑:好吧,也许我应该解释一下moveIndexBy,它基本上是“当前工作数组中最左边的索引”

它适用于 5x5 数组,例如,如果我给出x0 到 4 in 的值recursiveFunc(x,5,0,0);,它会在不太可能的问题中正确找到索引<index/questions> 0:2, 1:2, 2:2, 3:3, 4:3

但是对于更大的数组,这会失败,例如,10x10 将给出:

0 3
1 3
2 3
3 4
4 4
5 2
5 2
7 3
8 4
9 4

55和其他都是错的,分两步不可能找到:0 1 2 3 4 (5 6 7 8 9)5 6 (7 8 9)你还需要看索引是左还是右5 (6)。它甚至找不到索引6

4

1 回答 1

0

currentArrLen = (aproxHalf-moveIndexBy);

currentArrLen = aproxHalf;

我不知道是什么或为什么,但这解决了它:

0 3 
1 3 
2 3 
3 4 
4 4 
5 3 
6 3 
7 3 
8 4
9 4

编辑:这样,长度有时为 0 的未记录错误也已修复,因此更改if(currentArrLen<2)if(currentArrLen==1)

于 2013-10-01T23:59:43.613 回答