所以我正在为涉及二分搜索的类解决一个问题,我实现的解决它的算法工作正常但我的预感是,根据问题的参数,轻微的赌博会更有效
虚构的HollyBroke镇,Fl由30 x 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
并且一些阵列在节点级别10肯定不会是30 * 14我确定算法设置正确。我用笔和纸走过了两个层次,看起来它应该可以正常工作。
答案 0 :(得分:0)
找到它。
if (array[z].c = i){
应该是
if (array[z].c == i){
它的条件声明并未声明它们相等
我也错了。您只有大约40%的机会在10次猜测中成功定位房屋。