рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ, PHPред рднрд╛рдЧ рджреЛ

рдореИрдВ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЛ рдЖрдирдВрдж рдФрд░ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВред рдЖрдЬ рд╣рдо рдвреЗрд░ рдФрд░ рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╕рд╛рдордЧреНрд░реА рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ - рдЕрдзрд┐рдХрд╛рдВрд╢ рдЬрд╛рдирдХрд╛рд░реА, рдпрджрд┐ рд╕рднреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рддрд░рд╣ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЗрдВ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ , рдкреЗрдбрд╝реЛрдВ рдХреЛ рдЫреБрдЖ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЪрд▓реЛ рдвреЗрд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдвреЗрд░ рдФрд░ рдкреЗрдбрд╝реЛрдВ рдХреЗ рдмреАрдЪ рдЖрдо рдЬрдбрд╝реЗрдВ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдЧреНрд░рд╛рдлрд╝ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдбреАрдЬрдХрд╕реНрдЯреНрд░рд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

UPD : рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛

рдПрдХ рдвреЗрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖, рдкреЗрдбрд╝ рдЬреИрд╕реА рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реЛрддреА рд╣реИ - рдХреЛрдИ рднреА рдореВрд▓ рдиреЛрдб рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рддрд╣рдд, рдвреЗрд░ рдХрд╛ рдореВрд▓ рддрддреНрд╡ рд╣рдореЗрд╢рд╛ рдЕрдзрд┐рдХрддрдо рд╣реЛрдЧрд╛ред рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЕрдзрд┐рдХрддрдо (рдкреВрд░реНрдг) рд╣реАрдк рдпрд╛ рдЕрдзрд┐рдХрддрдо рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдвреЗрд░ рдЬрд╣рд╛рдВ рдореВрд▓ рддрддреНрд╡ рдиреНрдпреВрдирддрдо рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХрд╛ рдиреЛрдб рдЕрдкрдиреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реИ - рдиреНрдпреВрдирддрдо рдвреЗрд░ рдпрд╛ рдЫреЛрдЯрд╛ред

рдмрд╛рдЗрдирд░реА рд╣реАрдк (рдореИрдХреНрд╕рд╣реИрдк) рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдЫрд╡рд┐

рдпрд╣ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рджреЛ рдмрдЪреНрдЪреЗ рд╣реИрдВред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрджреНрдпрдкрд┐ рдвреЗрд░ рдХреЛ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреЗрдбрд╝реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдирдХреЗ рдкрд╛рд╕ рдСрд░реНрдбрд░ рджреЗрдиреЗ рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рдЯреНрд░рд╛рд╡реЗрд▓рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрджреЗрд╢ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдвреЗрд░ рдПрдХ рдЯреЗрдмрд▓ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрдЪрд╛рд▓рди рдЗрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ:

  1. create - a рдЦрд╛рд▓реА рдвреЗрд░ рдмрдирд╛рдПрдБред
  2. isEmpty - рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдвреЗрд░ рдЦрд╛рд▓реА рд╣реИ рдпрд╛ рдирд╣реАрдВред
  3. рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ - рдвреЗрд░ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝реЗрдВред
  4. рдЕрд░реНрдХ - рдвреЗрд░ рд╕реЗ рдПрдХ рддрддреНрд╡ (рд░реВрдЯ, рд╡рд░реНрдЯреЗрдХреНрд╕) рдХреЛ рдирд┐рдХрд╛рд▓реЗрдВ рдФрд░ рдирд┐рдХрд╛рд▓реЗрдВред


рдЪреВрдВрдХрд┐ рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдСрдкрд░реЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд╣рд▓реЗ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдПрдХ рдЖрдЗрдЯрдо рдХреЛ рд╣реАрдк рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдирд┐рдпрдо рдпрд╣ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рд░реВрдЯ рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдордиреЗ рдЙрдкрд░реНрдпреБрдХреНрдд рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдореВрд▓ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ (100)ред рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдвреЗрд░ рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдвреЗрд░ рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдВрддрд┐рдо рдиреЛрдб рдХреЛ рдореВрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдвреЗрд░ рдореБрдЦреНрдп рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХреЛ рдЕрд░реНрдзрд╡реГрддреНрдд рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдЫрд╡рд┐

рдЕрдм рд╣рдореЗрдВ рдПрдХ рдЕрд░реНрдз-рдвреЗрд░ рд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдвреЗрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирдИ рдЬрдбрд╝ рдХреЛ рдиреАрдЪреЗ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдирд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдореВрд▓ рддрддреНрд╡ рдХреА рдЕрдкрдиреЗ рд╡рдВрд╢рдЬреЛрдВ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдФрд░ рдЕрдзрд┐рдХрддрдо рд╡рдВрд╢ рдХреЗ рд╕рд╛рде рдЙрд╕рдХреЗ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЕрдзрд┐рдХрддрдо рддрддреНрд╡ рдХреЛ рдореВрд▓ рдореЗрдВ рд▓реМрдЯрд╛рдПрдВрдЧреЗ, рдЬрдмрдХрд┐ рдиреНрдпреВрдирддрдо рдЕрдзрд┐рдХрддрдо рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реБрдПред

рд╣рдо рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдХреНрд╕рд╣реИрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдмрд╛рдЗрдирд░реА рдЯреНрд░реА рдореЗрдВ рдПрдХ рдиреЛрдб рдореЗрдВ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдмрдЪреНрдЪреЗ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдиреЛрдб n рдХреЗ рд▓рд┐рдП, рдмрд╛рдЗрдирд░реА рд╣реАрдк рдореЗрдВ 2n + 1 рдиреЛрдб рд╣реЛрдВрдЧреЗред

рд╣рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

<?php class BinaryHeap { protected $heap; public function __construct() { $this->heap = array(); } public function isEmpty() { return empty($this->heap); } public function count() { //    return count($this->heap) - 1; } public function extract() { if ($this->isEmpty()) { throw new RunTimeException(' !'); } //           $root = array_shift($this->heap); if (!$this->isEmpty()) { //        //         $last = array_pop($this->heap); array_unshift($this->heap, $last); //     $this->adjust(0); } return $root; } public function compare($item1, $item2) { if ($item1 === $item2) { return 0; } //     minheap return ($item1 > $item2 ? 1 : -1); } protected function isLeaf($node) { //    2n + 1   "" return ((2 * $node) + 1) > $this->count(); } protected function adjust($root) { //     if (!$this->isLeaf($root)) { $left = (2 * $root) + 1; //   $right = (2 * $root) + 2; //   $h = $this->heap; //      if ( (isset($h[$left]) && $this->compare($h[$root], $h[$left]) < 0) || (isset($h[$right]) && $this->compare($h[$root], $h[$right]) < 0) ) { //    if (isset($h[$left]) && isset($h[$right])) { $j = ($this->compare($h[$left], $h[$right]) >= 0) ? $left : $right; } else if (isset($h[$left])) { $j = $left; //   } else { $j = $right; //   } //     list($this->heap[$root], $this->heap[$j]) = array($this->heap[$j], $this->heap[$root]); //     //    $j $this->adjust($j); } } } } 


рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХрд╛ рд╕рдЯреАрдХ рд╡рд┐рдкрд░реАрдд рд╣реИ: рд╣рдо рдПрдХ рддрддреНрд╡ рдХреЛ рдвреЗрд░ рдХреЗ рдиреАрдЪреЗ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рди рд╣реЛ рдФрд░ рдореБрдЦреНрдп рд╕реНрдерд┐рддрд┐ рд╕рдВрддреБрд╖реНрдЯ рд╣реЛред рдЪреВрдВрдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдкреВрд░реНрдг рдмрд╛рдЗрдирд░реА рдЯреНрд░реА рдореЗрдВ n / 2 + 1 рдиреЛрдбреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рд╣рдо рдПрдХ рд╕рд░рд▓ рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдвреЗрд░ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 public function insert($item) { //       $this->heap[] = $item; //     $place = $this->count(); $parent = floor($place / 2); //        while ( $place > 0 && $this->compare( $this->heap[$place], $this->heap[$parent]) >= 0 ) { //   list($this->heap[$place], $this->heap[$parent]) = array($this->heap[$parent], $this->heap[$place]); $place = $parent; $parent = floor($place / 2); } } 


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ рдФрд░ рдвреЗрд░ рдореЗрдВ рдХрдИ рдорд╛рди рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:

 <?php $heap = new BinaryHeap(); $heap->insert(19); $heap->insert(36); $heap->insert(54); $heap->insert(100); $heap->insert(17); $heap->insert(3); $heap->insert(25); $heap->insert(1); $heap->insert(67); $heap->insert(2); $heap->insert(7); 


рдпрджрд┐ рд╣рдо рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓рддреЗ рд╣реИрдВ:

 Array ( [0] => 100 [1] => 67 [2] => 54 [3] => 36 [4] => 19 [5] => 7 [6] => 25 [7] => 1 [8] => 17 [9] => 2 [10] => 3 ) 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджреЗрд╢ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рд╣рдорд╛рд░реА рдЕрдкреЗрдХреНрд╖рд╛ рд╕реЗ рдХреБрдЫ рдЕрд▓рдЧ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рд╣рдо рдвреЗрд░ рд╕реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛:

 <?php while (!$heap->isEmpty()) { echo $heap->extract() . "n"; } 


 100 67 54 36 25 19 17 7 3 2 1 


SplMaxHeap рдФрд░ SplMinHeap

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА SplHeap, SplMaxHeap рдФрд░ SplMinHeap рдХреЗ рддреИрдпрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВред рдмрд╕ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджреЗрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рддреБрд▓рдирд╛ рд╡рд┐рдзрд┐ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 <?php class MyHeap extends SplMaxHeap { public function compare($item1, $item2) { return (int) $item1 - $item2; } } 


рдпрд╣ рд╡рд┐рдзрд┐ рджреЛ рдиреЛрдбреНрд╕ рдХреА рдХрд┐рд╕реА рднреА рддреБрд▓рдирд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧреА рдФрд░ SplMaxHeap рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ $ item1 $ item2 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, 0 рдпрджрд┐ рд╡реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВ рдФрд░ рдпрджрд┐ $ 2 рдЖрдЗрдЯрдо $ item1 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ рддреЛ рдирдХрд╛рд░рд╛рддреНрдордХред рдЕрдЧрд░ рд╣рдореЗрдВ SplMinHeap рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛ рдпрджрд┐ $ item1 $ item2 рд╕реЗ рдХрдо рд╣реИред

рдвреЗрд░ рдореЗрдВ рдХрдИ рд╕рдорд╛рди рддрддреНрд╡реЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛

SplPyerityQueue - рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░

рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд╛рд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рдПрдХ рдХрддрд╛рд░ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдвреЗрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред SplPriorityQueue рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдпрд╣ рдЕрдзрд┐рдХрддрдо рд╣реЛрдЧрд╛ред рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЯрд┐рдХрдЯ рдкреНрд░рдгрд╛рд▓реА рдпрд╛ рдПрдХ рд╣реЗрд▓реНрдк рдбреЗрд╕реНрдХред

SplHeap рдХреЗ рд╕рд╛рде рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЛ рдмрд╕ SplPyerityQueue рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рддреБрд▓рдирд╛ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 <?php class PriQueue extends SplPriorityQueue { public function compare($p1, $p2) { if ($p1 === $p2) return 0; //    ,   //    return ($p1 < $p2) ? 1 : -1; } } 


SplPyerityQueue рдореЗрдВ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рддрддреНрд╡ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рддрддреНрд╡ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рднреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред рдбрд╛рд▓рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдкрдХреЗ рддреБрд▓рдирд┐рддреНрд░ рд░рд┐рдЯрд░реНрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдвреЗрд░ рдХреЛ рдмрд╣рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ, рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ:

 <?php $pq = new PriQueue(); $pq->insert('A', 4); $pq->insert('B', 3); $pq->insert('C', 5); $pq->insert('D', 8); $pq->insert('E', 2); $pq->insert('F', 7); $pq->insert('G', 1); $pq->insert('H', 6); $pq->insert('I', 0); while ($pq->valid()) { print_r($pq->current()); echo "n"; $pq->next(); } 


рдЬреЛ рдЕрдВрддрддрдГ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЧрд╛:

 I G E B A C H F D 


рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рддрддреНрд╡ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рдШрдЯрддреЗ рдХреНрд░рдо рдореЗрдВ рд╣реИрдВ - рдЙрдЪреНрдЪрддрдо рд╕реЗ рдирд┐рдореНрдирддрдо (рдПрдХ рдХрдо рдореВрд▓реНрдп рдПрдХ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ)ред рдЖрдк рдЙрд╕ рдХреНрд░рдо рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдЗрдЯрдо рдХреЗрд╡рд▓ рддреБрд▓рдирд╛ рд╡рд┐рдзрд┐ рдХреЛ рдмрджрд▓рдХрд░ рд▓реМрдЯрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рдП рдпрджрд┐ $ p1 $ P2 рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ рдЖрдЗрдЯрдо рдХрд╛ рдорд╛рди рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдорд╛рди, рдпрд╛ рдорд╛рди рдФрд░ рдЙрдирдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рд╖реНрдХрд░реНрд╖рдг рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 <?php //    $pq->setExtractFlags(SplPriorityQueue::EXTR_PRIORITY); //    (   //   ) $pq->setExtractFlags(SplPriorityQueue::EXTR_BOTH); 


рдЧрд┐рдирддрд╛

рдЧреНрд░рд╛рдлрд╝ рдХреЗ рдкреАрдЫреЗ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ - рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрдХреВрд▓рди, рд░реВрдЯрд┐рдВрдЧ рдпрд╛ рд╕реЛрд╢рд▓ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгред Google рдкреЗрдЬрд░реИрдВрдХ, рдЕрдореЗрдЬрд╝реЕрди рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рд▓реЗрдЦ рдХреЗ рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рдореИрдВ рджреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдЬрд┐рдирдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдПрдХ рдЫреЛрдЯрд╛ рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдФрд░ рдХрдо рд╕реЗ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░реБрдХрдирд╛ред

рдПрдХ рдЧреНрд░рд╛рдл рдПрдХ рдЧрдгрд┐рддреАрдп рдирд┐рд░реНрдорд╛рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЧреНрд░рд╛рдл рдореЗрдВ рдХреЛрдиреЗ (рдиреЛрдбреНрд╕) рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рд╛рде рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдордирдорд╛рдирд╛ рдЬреБрдбрд╝рд╛рд╡ рд╣реЛрддрд╛ рд╣реИред рдпреЗ рдХрдиреЗрдХреНрд╢рди рджрд┐рд╢рд╛рддреНрдордХ (рдЙрдиреНрдореБрдЦ) рдФрд░ рдЧреИрд░-рджрд┐рд╢рд╛рддреНрдордХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрдиреЗрдХреНрд╢рди рджреЛ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╣реИ рдФрд░ A тЖТ B рдХрдиреЗрдХреНрд╢рди B тЖТ A рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдХрдиреЗрдХреНрд╢рди рдХреА рдХреЛрдИ рджрд┐рд╢рд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдиреЗрдХреНрд╢рди рдПрдмреА рдФрд░ рдмреАрдП рд╕рдорд╛рди рд╣реИрдВред рдЗрди рдирд┐рдпрдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреЗрдбрд╝ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реЗрдЦрд╛рдВрдХрди рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрдиреЗрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдиреЛрдбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред

рдХрд╛рдЙрдВрдЯ рдХрд╛ рд╡рдЬрди рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рднрд╛рд░рд┐рдд рдЧреНрд░рд╛рдл рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ, рдПрдХ рдРрд╕рд╛ рдЧреНрд░рд╛рдл рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рднрд╛рд░ рд╣реЛрддрд╛ рд╣реИ (рдиреЛрдб рдП рд╕реЗ рдиреЛрдб рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рдХрд╛ "рдореВрд▓реНрдп")ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рдкрде, рдпрд╛ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рд╕рдмрд╕реЗ "рд╕рд╕реНрддреЗ" рдкрде рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред GoogleMap рдореЗрдВ рдкрде рдмрд┐рдЫрд╛рдиреЗ рдХреЛ рдареАрдХ рд╕реЗ рднрд╛рд░рд┐рдд рдЧреНрд░рд╛рдлрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реНрдЯреЙрдк рдХреА рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ (рдЫрд▓рд╛рдВрдЧ)

рдЧреНрд░рд╛рдлрд╝ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рджреЛ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╕реНрдЯреЙрдк рдХреА рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреЗрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣рд╛рдБ рдЧреНрд░рд╛рдл рджреЛ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ - рдЧрд╣рд░рд╛рдИ рдпрд╛ рдЪреМрдбрд╝рд╛рдИ рдореЗрдВ рдкреЗрдбрд╝ рдХреЛ рдкреАрдЫреЗ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЬрдм рд╣рдордиреЗ рдЦреЛрдЬ рдХреА рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдВрдЪ рдХреА рдереА, рдЕрдм рдЖрдЗрдП рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рджреЗрдЦреЗрдВред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреНрд░рд╛рдл рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ:

рдЫрд╡рд┐

рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдпрд╣ рдЧреНрд░рд╛рдл рдЧреИрд░-рджрд┐рд╢рд╛рддреНрдордХ рд╣реИред рдХрд╛рд░реНрдп рдХрд┐рд╕реА рднреА рджреЛ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕реНрдЯреЙрдк рдХреЛ рдЦреЛрдЬрдирд╛ рд╣реИред рдЪреМрдбрд╝рд╛рдИ рдореЗрдВ рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рд░реВрдЯ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ рджреВрд╕рд░реЗ рдиреЛрдб рд╕реЗ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд░реВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ) рдФрд░ рдиреАрдЪреЗ рд╕реНрддрд░ рд╕реЗ рдкреЗрдбрд╝ рдХреЗ рд╕реНрддрд░ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕реЗ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдиреЛрдбреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрддрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрднреА рддрдХ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд╣рд░ рд╕реНрддрд░ рдкрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдИрдкрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:



рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рдХреИрд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЧреНрд░рд╛рдлрд╝ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рдХреМрди рд╕реЗ рдиреЛрдб рдкрдбрд╝реЛрд╕реА рдпрд╛ рдмрд┐рдирд╛ рдкрд░рд┐рдХрд▓реНрдкрд┐рдд рд╣реИрдВ? рдпрд╣ рд╣рдореЗрдВ рдЗрд╕ рд╕рд╡рд╛рд▓ рдкрд░ рд▓рд╛рддрд╛ рд╣реИ рдХрд┐ рд░реЗрдЦрд╛рдВрдХрди рдХреИрд╕реЗ рдореЙрдбрд▓рд┐рдВрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЧреНрд░рд╛рдл рджреГрд╢реНрдп

рдЖрдорддреМрд░ рдкрд░, рдЧреНрд░рд╛рдлрд╝ рдХреЛ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рдЯреЗрдмрд▓ рдпрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕, рдЬреЛ рдкрдбрд╝реЛрд╕реА рдиреЛрдбреНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред
рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЫрд╡рд┐рдЫрд╡рд┐

рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ, рдиреЛрдбреНрд╕ рдХреЗ рдЪреМрд░рд╛рд╣реЗ рдкрд░, "1" рд╕реЗрдЯ рд╣реИ рдпрджрд┐ рдиреЛрдбреНрд╕ рдкрдбрд╝реЛрд╕реА рд╣реИрдВред

рд╕реВрдЪреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдпрджрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдиреЗ рдореЗрдВ рдЖрдкрд╕ рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ, рдЬрдмрдХрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рддреЗрдЬреА рд╕реЗ рдЦреЛрдЬ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдЧреНрд░рд╛рдл рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд╕рд╛рде рдХреМрди рд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рд╣рдо рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

 <?php $graph = array( 'A' => array('B', 'F'), 'B' => array('A', 'D', 'E'), 'C' => array('F'), 'D' => array('B', 'E'), 'E' => array('B', 'D', 'F'), 'F' => array('A', 'E', 'C'), ); 


рдФрд░ рд╣рдорд╛рд░реА рдЪреМрдбрд╝рд╛рдИ-рдкрд╣рд▓реА рдЦреЛрдЬ рд▓рд┐рдЦреЗрдВ:

 <?php class Graph { protected $graph; protected $visited = array(); public function __construct($graph) { $this->graph = $graph; } //     ()  2  public function breadthFirstSearch($origin, $destination) { //      foreach ($this->graph as $vertex => $adj) { $this->visited[$vertex] = false; } //   $q = new SplQueue(); //           $q->enqueue($origin); $this->visited[$origin] = true; //          $path = array(); $path[$origin] = new SplDoublyLinkedList(); $path[$origin]->setIteratorMode( SplDoublyLinkedList::IT_MODE_FIFO|SplDoublyLinkedList::IT_MODE_KEEP ); $path[$origin]->push($origin); $found = false; //         while (!$q->isEmpty() && $q->bottom() != $destination) { $t = $q->dequeue(); if (!empty($this->graph[$t])) { //     foreach ($this->graph[$t] as $vertex) { if (!$this->visited[$vertex]) { //     ,       $q->enqueue($vertex); $this->visited[$vertex] = true; //      $path[$vertex] = clone $path[$t]; $path[$vertex]->push($vertex); } } } } if (isset($path[$destination])) { echo " $origin  $destination  ", count($path[$destination]) - 1, " "; $sep = ''; foreach ($path[$destination] as $vertex) { echo $sep, $vertex; $sep = '->'; } echo "n"; } else { echo "   $origin  $destinationn"; } } } 


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓рддреЗ рд╣реИрдВ:

рдЧрд┐рдирддреА рдкрд░ рдлрд┐рд░ рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ
рдЫрд╡рд┐


 <?php $g = new Graph($graph); //     D  C $g->breadthFirstSearch('D', 'C'); // : //  D  C  3  // D->E->F->C //     B  F $g->breadthFirstSearch('B', 'F'); // : //  B  F  2  // B->A->F //     A  C $g->breadthFirstSearch('A', 'C'); // : //  A  C  2  // A->F->C //     A  G $g->breadthFirstSearch('A', 'G'); // : //   A  G  


рдпрджрд┐ рд╣рдо рдХрддрд╛рд░ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд╛рдИрдкрд╛рд╕ рдЧрд╣рд░рд╛рдИ рдореЗрдВ рд╣реЛрдЧрд╛ред

рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ

рдПрдХ рдФрд░ рдЖрдо рд╕рдорд╕реНрдпрд╛ рдХрд┐рд╕реА рднреА рджреЛ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рдХрд╛ рдЗрд╖реНрдЯрддрдо рд░рд╛рд╕реНрддрд╛ рдвреВрдВрдврдирд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ GoogleMaps рдореЗрдВ рдПрдХ рдорд╛рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдХрд╛рд░реНрдп рд░реВрдЯрд┐рдВрдЧ, рдЯреНрд░реИрдлрд╝рд┐рдХ рдкреНрд░рдмрдВрдзрди, рдФрд░ рдЗрд╕реА рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ 1959 рдореЗрдВ рдПрдХ 29 рд╡рд░реНрд╖реАрдп рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдПрдбреНрд╕реЗрдЬрд░ рд╡реЗрдЗрдмреЗ рдбреЗрдЬреНрдХреНрдЯреНрд░рд╛ рдерд╛ ред рдЖрдк рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рд╕реНрдкреНрд▓рд┐рдЯрдлреЗрд╕ рд╕реЗ рд╣рдмрдлреЗрд╕ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ, рджрд┐рдЬреНрдХреНрд╕реНрдЯреНрд░рд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдиреЛрдбреНрд╕ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЬреЛрдбрд╝реЗ рдХреЗ рдмреАрдЪ рд╣рд░ рдХрдиреЗрдХреНрд╢рди рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ, рд╢реБрд░реБрдЖрддреА рдиреЛрдб рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдиреЛрдбреНрд╕ рдХреЗ рд╕реЗрдЯ рдХреЛ рд▓рдХреНрд╖реНрдп рдиреЛрдб рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рддрдХ рдХрдо рд╕реЗ рдХрдо рджреВрд░реА рддрдХ рдЕрджреНрдпрддрди рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛред

рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЙрдирдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рднреА рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдиреЗ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдиреЗ рдХреЗрд╡рд▓ рджрд┐рдЬреНрдХреНрд╕реНрдЯреНрд░рд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдХрдорд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╕рдХрд╛рд░рд╛рддреНрдордХ рднрд╛рд░рд┐рдд рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рд╡реЗ рдЬрд╣рд╛рдВ рд▓рд┐рдВрдХ рдкрд░ рдХреЛрдИ рдирдХрд╛рд░рд╛рддреНрдордХ рднрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЧреНрд░рд╛рдл рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреЗ рдмреАрдЪ рдиреЛрдбреНрд╕ рдХреЗ рд╕рдВрдмрдВрдз рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

рдЫрд╡рд┐

 <?php $graph = array( 'A' => array('B' => 3, 'D' => 3, 'F' => 6), 'B' => array('A' => 3, 'D' => 1, 'E' => 3), 'C' => array('E' => 2, 'F' => 3), 'D' => array('A' => 3, 'B' => 1, 'E' => 1, 'F' => 2), 'E' => array('B' => 3, 'C' => 2, 'D' => 1, 'F' => 5), 'F' => array('A' => 6, 'C' => 3, 'D' => 2, 'E' => 5), ); 


рд╣рдо рд╕рднреА "рдЧреИрд░-рдЕрдиреБрдХреВрд▓рд┐рдд" рдиреЛрдбреНрд╕ рдХреА рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

 <?php class Dijkstra { protected $graph; public function __construct($graph) { $this->graph = $graph; } public function shortestPath($source, $target) { //       $d = array(); //  ""    $pi = array(); //     $Q = new SplPriorityQueue(); foreach ($this->graph as $v => $adj) { $d[$v] = INF; //      $pi[$v] = null; //     foreach ($adj as $w => $cost) { //      $Q->insert($w, $cost); } } //      - 0 $d[$source] = 0; while (!$Q->isEmpty()) { //    $u = $Q->extract(); if (!empty($this->graph[$u])) { //      foreach ($this->graph[$u] as $v => $cost) { //        $alt = $d[$u] + $cost; //     if ($alt < $d[$v]) { $d[$v] = $alt; // update minimum length to vertex        $pi[$v] = $u; //       } } } } //       //    $S = new SplStack(); //     $u = $target; $dist = 0; //       while (isset($pi[$u]) && $pi[$u]) { $S->push($u); $dist += $this->graph[$u][$pi[$u]]; //     $u = $pi[$u]; } //   ,     if ($S->isEmpty()) { echo "   $source  $targetn"; } else { //        //   (LIFO)  $S->push($source); echo "$dist:"; $sep = ''; foreach ($S as $v) { echo $sep, $v; $sep = '->'; } echo "n"; } } } 


рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рджрд┐рдЬреНрдХреНрд╕реНрдЯреНрд░рд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдПрдХ рд╕рд░рд▓ рдЪреМрдбрд╝рд╛рдИ-рдкрд╣рд▓рд╛ рдЦреЛрдЬ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЖрдЗрдП рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ:

 <?php $g = new Dijkstra($graph); $g->shortestPath('D', 'C'); // 3:D->E->C $g->shortestPath('C', 'A'); // 6:C->E->D->A $g->shortestPath('B', 'F'); // 3:B->D->F $g->shortestPath('F', 'A'); // 5:F->D->A $g->shortestPath('A', 'G'); //    A  G 


рд╡рд╣ рд╕рдм рд╣реИред рдЗрд╕ рдкрд░, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рд╕рдВрд░рдЪрдирд╛рдУрдВ рдкрд░ рдЗрдЧреНрдиреЗрд╢рд┐рдпрд╕ рдЯреАрдУ рдХреЗ рд▓реЗрдЦ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдПред рдореИрдВ рдЙрди рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрддрд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдкрдврд╝рд╛, рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереА рдХрд┐ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд▓реЛрдЧ рдкрд╕рдВрджреАрджрд╛ рдореЗрдВ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкрд╕рдВрджреАрджрд╛ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдкреЛрд╕реНрдЯ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд░рд╣рддреЗ рд╣реИрдВ :)

рдпрд╣рд╛рдБ рд╕реЗ рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ
рджреЗрдЦ рд▓реЗрдирд╛
рдЫрд╡рд┐ рдЫрд╡рд┐


рдЫрд╡рд┐ рдЫрд╡рд┐


рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣рд╛рдВ рд╕рд╛рдорд╛рдиреНрдп рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рдПрд╕рдкреАрдПрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЪреБрдирд╛рд╡ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХ рд╕рдВрдЪрд╛рд▓рди рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рджреВрд╕рд░реЗ + рдХрдо рдореЗрдореЛрд░реА рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдкреАрдПрдо рдкрд╛рда, рдЕрдиреБрд╡рд╛рдж, рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдЬрд╛рдирдХрд╛рд░реА, рд╕рд╛рде рд╣реА рдЕрднрд┐рдорд╛рдиреА рдЭреВрда рдореЗрдВ рдореЗрд░реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЪрд░реНрдЪрд╛ рдФрд░ рд▓реЗрдЦ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдж рдХреЗ рдкрд░рд┐рд╡рд░реНрдзрди рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреА рд╣реИрдВред

Source: https://habr.com/ru/post/In190474/


All Articles