不平衡的二叉树不能正常工作.node . js

Unbalanced binary tree not functioning properly. Node.Js

本文关键字:工作 node js 常工作 二叉树 不能 不平衡      更新时间:2023-09-26

我正在解决一个涉及二分搜索的类问题我实现的算法可以很好地解决它但我的直觉是,考虑到问题的参数,稍微赌一把会更有效

虚构的小镇HollyBroke, Fl由一个30 × 30的街区网格组成。街道以美国总统的名字命名,大街也用数字编号。臭名昭著的两字纵火犯挟持了整个城镇。他每周六都会选择一所房子进行纵火,并通过挑战他们猜测每周犯罪的地点来嘲弄警察部门。在点燃火柴之前,他会在简短的电话中回答10个"是"或"否"的答案。(他不会一直在线上,所以电话无法被追踪。)市政府希望你制定一个程序,以便在这个臭名昭著的罪犯打来电话时迅速作出反应。

这个问题的答案很容易创建一个算法,但我认为中位数1/中位数+1的赌博会更有效。我的直觉是,通常情况下,我得出的结论会多出一个问题,让我可以问一个关于纵火犯的二元搜索问题,或者如果游戏允许的话,我会在通话结束前和警察一起出现。如果我事先不直接解决它,我就会有一个非常小的空间来搜索完成后,像三个或四个街区彼此相邻,

这是我的"赌博"二进制搜索的代码。

`var array = [{"a":30,"b":30,"c":0}]
function findLower(input) {

    var half = Math.floor(input/2);
    if(0 == input%2)
        return (half-1);
    else
        return (half);
};
function findUpper(input) {
    var  half = Math.floor(input/2);
    if(input%2 == 0)
        return (half+1);
    else
        return (half+1);
}
for (var i = 0; i <= 9; i++){
    for (var z = array.length - 1; z >= 0; z--) {
        if (array[z].c = i){        
            if (array[z].a>array[z].b)
                array.push({"a":findLower(array[z].a),"b":array[z].b,"c":array[z].c + 1},{"a":findUpper(array[z].a),"b":array[z].b,"c":array[z].c + 1})
            else
                array.push({"a":array[z].a,"b":findLower(array[z].b),"c":array[z].c + 1},{"a":array[z].a,"b":findUpper(array[z].b),"c":array[z].c + 1})
        }
    };  
}
console.log(array.length);`

它提出了一个荒谬的数组长度给定它应该是2^10 +2^9 +2^ 8 .....= 2047程序得到的数组长度为19683

和一些数组应该肯定不是30*14在节点级别10我确信算法设置正确。我已经用笔和纸画了两层,看起来应该可以正常工作了。

找到了。

   if (array[z].c = i){
应该

    if (array[z].c == i){ 

是一个条件语句,没有声明它们相等

我也错了。在10次猜测中,你只有大约40%的机会成功找到房子。