首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化混叠数组-我需要遍历整个数组吗?

优化混叠数组-我需要遍历整个数组吗?
EN

Stack Overflow用户
提问于 2020-05-30 21:47:33
回答 1查看 32关注 0票数 0

我会尽力解释我的问题。我试图在PHP中创建一个棋子引擎(只是为了好玩:-)代码中的整数只返回有效的移动(为了简单--在实际代码中,它是对象和运动模式,取决于它的内容)

,我在寻找一种有效搜索数组的方法,的意思是尽可能快。请看我在下面代码中的注释:“不需要遍历所有1000个值,就可以跳出循环吗?”我希望这些评论能试图解释我想要达到的目标。我只是在寻找方法来优化下面的代码,而不是完整的代码:-)

代码语言:javascript
复制
//This is for demonstrating
//1000 values to go through
$moves_maybe_valid = range(1,1000);
shuffle($moves_maybe_valid);

//Go through possible values
$move_checked = [];
$nr=0;
foreach($moves_maybe_valid as $mmv) {
    $move_is_valid = check_move($mmv);

    //Check if not in checked array
    if ($move_is_valid === false && !in_array($mmv, $move_checked)) {

        //Add to checked move array
        $move_checked[] = $mmv;
    }

    //IS it possible to break out of loop without 
    //going through all 1000 values?
    //When all valid moves are true I want to break here
    //but I don't know when that is.

}

//for demonstration purpose only
//numbers (5,6) that returns true are unknown until an
//an actual check is done in this function
function check_move($nr) {
    if ($nr == 5 || $nr == 6) {
        return true;
    }
    return false;
}

如果我说我会从一开始就生成有效的移动(基于下面的评论)

代码语言:javascript
复制
$valid_moves = [5,6];

从循环中挣脱出来的最好方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-30 22:39:44

在正常情况下,您可能遇到的有效移动的最大数量大约为100次。如果你有9位女王,你可能会得到200英镑。不过,1000还是太大了。

生成有效的移动列表应该意味着您甚至不需要检查它们是否有效。但是,我想你正在生成一个所有组合的列表,即使它们涉及到传递另一个部分、用自己的部分在正方形上着陆,或者在板域之外着陆。

我想说,在你的第一代做那些检查:

  • 为每一个棋子,检查4种可能的移动,并为每个城堡或主教存储有效的
  • ,按顺序检查14种可能,从棋子位置开始,沿着4个方向走,直到你到达一个无效的空间(击中自己的棋子意味着你走得太远了)。击打对手棋子意味着你最后一次击中了可能)

对于每一步,你也需要确保它不会让你受到控制。这个特性可能会被优化,所以你只能从国王的位置看出来。

一旦你通过所有的部分,最多为16,你的移动列表应该只包含有效的移动。

事情变得昂贵的地方是你的前瞻。你想要模拟多少个未来?你如何衡量每一个移动的价值/风险?

那就做侧写。你需要一个良好的取样剖析器来优化和找到你的热点。注意昂贵的便利功能,如in_array,并尽量避免。循环中的循环会降低性能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62109065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档