Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie den Backtracking-Algorithmus, um Teilmengenprobleme in PHP zu lösen

So verwenden Sie den Backtracking-Algorithmus, um Teilmengenprobleme in PHP zu lösen

醉折花枝作酒筹
醉折花枝作酒筹nach vorne
2021-07-08 15:06:521628Durchsuche

Der Backtracking-Algorithmus ist eigentlich ein Suchversuchsprozess, der der Aufzählung ähnelt. Er sucht hauptsächlich nach der Lösung des Problems, wenn während des Suchversuchsprozesses festgestellt wird, dass die Lösungsbedingungen nicht mehr erfüllt sind Probieren Sie andere Wege aus. Die Backtracking-Methode ist eine Optimierungssuchmethode, die gemäß den Optimierungsbedingungen nach vorne sucht, um das Ziel zu erreichen.

So verwenden Sie den Backtracking-Algorithmus, um Teilmengenprobleme in PHP zu lösen

Wenn Sie einen bestimmten Schritt erkunden und feststellen, dass die ursprüngliche Wahl nicht optimal ist oder das Ziel nicht erreichen kann, treten Sie einen Schritt zurück und treffen eine andere Wahl. Diese Technik besteht darin, zurückzugehen und es erneut zu versuchen, wenn dies nicht der Fall ist. t funktioniert, ist die Backtracking-Methode und eine bestimmte Methode, die die Backtracking-Bedingungen erfüllt. Der Punkt dieses Zustands wird als „Lookback-Punkt“ bezeichnet. Viele komplexe und umfangreiche Probleme können die Backtracking-Methode verwenden, die als „universelle Problemlösungsmethode“ bekannt ist.

Teilmengen

Bei einer gegebenen Menge ganzzahliger Arrays ohne doppelte Elemente werden alle möglichen Teilmengen (Potenzmengen) des Arrays zurückgegeben.

Hinweis: Die Lösungsmenge darf keine wiederholten Teilmengen enthalten.

Beispiel:

输入: nums = [1,2,3]
输出:[  [3],  
[1],  
[2],  
[1,2,3], 
[1,3],  
[2,3], 
[1,2],  
[]]

Problemlösungsidee 1

Direkter Verweis auf das Permutations-/Kombinations-/Teilmengenproblem des Backtracking-Algorithmus

Code

class Solution {
    public $result = [];
    /** 
    * @param Integer[] $nums 
    * @return Integer[][] 
    */
    function subsets($nums) {
       $this->dfs(0, $nums, []);
       return $this->result;
    }
    // 递归部分 
    function dfs($start, $nums, $array){
        $this->result[] = $array;
        for ($i = $start; $i < count($nums); $i++) {
            $array[] = $nums[$i];
            $this->dfs($i + 1, $nums, $array);
            array_pop($array);
        }
    }}

Problemlösungsidee 2 Iterativ. Methode

Die Das Initialisierungsergebnis besteht aus zwei leerdimensionalen Arrays, die über jedes Element im angegebenen Array iterieren und bei jeder Iteration die Ergebnismenge verarbeiten. Jedes Element in der Ergebnismenge fügt die durchquerte Zahl hinzu und die Länge der Ergebnismenge nimmt weiter zu.

class Solution {
  /** 
  * @param Integer[] $nums 
  * @return Integer[][] 
  */
    function subsets($nums) {
        $result = [];
        $result[] = [];
        $numsCount = count($nums);
        for ($i = 0; $i < $numsCount; $i++) {
            $resultCount = count($result);
            for ($j = 0; $j < $resultCount; $j++) {
                $tmp = $result[$j];
                $tmp[] = $nums[$i];
                $result[] = $tmp;
            }
        }
        return $result;
    }}

Empfohlenes Lernen: php-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo verwenden Sie den Backtracking-Algorithmus, um Teilmengenprobleme in PHP zu lösen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:hxd.life. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen