亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

優化打亂的數組——我需要遍歷整個數組嗎?

優化打亂的數組——我需要遍歷整個數組嗎?

PHP
蝴蝶刀刀 2023-04-21 16:58:23
我會盡力解釋我的問題。我正在嘗試在 PHP 中創建一個國際象棋引擎(只是為了好玩 :-))代碼中的整數只是返回有效的移動(為簡單起見 - 在實際代碼中它是對象和移動模式取決于它是關于哪一塊的)我正在尋找一種有效搜索數組的方法。有效地我的意思是盡可能快??纯次以谙旅娲a中的評論“是否可以在不遍歷所有 1000 個值的情況下跳出循環?” 我希望評論能解釋我想要達到的目標。我只是在尋找優化以下代碼的想法,而不是完整的代碼:-)//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 functionfunction check_move($nr) {    if ($nr == 5 || $nr == 6) {        return true;    }    return false;}如果我說我會從一開始就生成有效的移動(基于下面的評論)$valid_moves = [5,6];跳出循環的最佳方法是什么?
查看完整描述

1 回答

?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

在正常情況下,您可能遇到的最大有效移動數約為 100。隨著升級,它可能會更高一些,所以如果您有 9 個皇后,您可能會達到 200。不過,1000 還是太大了。

生成有效動作列表應該意味著您甚至不需要檢查它們是否有效。但是,我想你正在生成所有組合的列表,即使它們涉及通過另一塊,用你自己的塊落在一個正方形上,或者落在棋盤域之外。

我會說,在你的第一代做這些檢查:

  • 對于每個棋子,檢查 4 種可能的移動并存儲有效的移動

  • 對于每個城堡或主教,按順序檢查 14 個可能的位置,從棋子位置開始,向 4 個方向前進,直到你擊中一個無效空間(擊中你自己的棋子意味著你走得太遠了。擊中對手棋子意味著你'我打了最后一個)

  • 對于皇后,與城堡或主教相同,但有 8 個方向而不是 4 個

  • 對于騎士,檢查 8 種可能的動作是否有效

  • 對于國王,檢查 8 種可能的移動是否有效

  • 檢查兩個城堡移動中的任何一個是否可行

對于每一步,您還需要確保它不會讓您受制于人。該功能可能可以優化,因此您只能從國王的位置向外看。

一旦你遍歷了所有棋子,最多 16 個,你的動作列表應該只包含有效的動作。

事情變得昂貴的地方是你的前瞻性。您想模擬未來的多少步?你如何衡量每一步的價值/風險?

然后是簡介。您需要一個好的采樣分析器來優化和找到您的熱點。注意昂貴的便利功能,如有in_array可能請避免使用。循環中的循環會降低性能。


查看完整回答
反對 回復 2023-04-21
  • 1 回答
  • 0 關注
  • 107 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號