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

рдпрд╣ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рджреЛ рдмрдЪреНрдЪреЗ рд╣реИрдВред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрджреНрдпрдкрд┐ рдвреЗрд░ рдХреЛ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреЗрдбрд╝реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдирдХреЗ рдкрд╛рд╕ рдСрд░реНрдбрд░ рджреЗрдиреЗ рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рдЯреНрд░рд╛рд╡реЗрд▓рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрджреЗрд╢ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдвреЗрд░ рдПрдХ рдЯреЗрдмрд▓ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрдЪрд╛рд▓рди рдЗрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ:
- create - a рдЦрд╛рд▓реА рдвреЗрд░ рдмрдирд╛рдПрдБред
- isEmpty - рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдвреЗрд░ рдЦрд╛рд▓реА рд╣реИ рдпрд╛ рдирд╣реАрдВред
- рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ - рдвреЗрд░ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝реЗрдВред
- рдЕрд░реНрдХ - рдвреЗрд░ рд╕реЗ рдПрдХ рддрддреНрд╡ (рд░реВрдЯ, рд╡рд░реНрдЯреЗрдХреНрд╕) рдХреЛ рдирд┐рдХрд╛рд▓реЗрдВ рдФрд░ рдирд┐рдХрд╛рд▓реЗрдВред
рдЪреВрдВрдХрд┐ рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдСрдкрд░реЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд╣рд▓реЗ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдПрдХ рдЖрдЗрдЯрдо рдХреЛ рд╣реАрдк рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдирд┐рдпрдо рдпрд╣ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рд░реВрдЯ рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдордиреЗ рдЙрдкрд░реНрдпреБрдХреНрдд рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдореВрд▓ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ (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() {
рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХрд╛ рд╕рдЯреАрдХ рд╡рд┐рдкрд░реАрдд рд╣реИ: рд╣рдо рдПрдХ рддрддреНрд╡ рдХреЛ рдвреЗрд░ рдХреЗ рдиреАрдЪреЗ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рди рд╣реЛ рдФрд░ рдореБрдЦреНрдп рд╕реНрдерд┐рддрд┐ рд╕рдВрддреБрд╖реНрдЯ рд╣реЛред рдЪреВрдВрдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдкреВрд░реНрдг рдмрд╛рдЗрдирд░реА рдЯреНрд░реА рдореЗрдВ n / 2 + 1 рдиреЛрдбреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рд╣рдо рдПрдХ рд╕рд░рд▓ рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдвреЗрд░ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
public function insert($item) {
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ рдФрд░ рдвреЗрд░ рдореЗрдВ рдХрдИ рдорд╛рди рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:
<?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;
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
рдЧрд┐рдирддрд╛
рдЧреНрд░рд╛рдлрд╝ рдХреЗ рдкреАрдЫреЗ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ - рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрдХреВрд▓рди, рд░реВрдЯрд┐рдВрдЧ рдпрд╛ рд╕реЛрд╢рд▓ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгред Google рдкреЗрдЬрд░реИрдВрдХ, рдЕрдореЗрдЬрд╝реЕрди рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рд▓реЗрдЦ рдХреЗ рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рдореИрдВ рджреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдЬрд┐рдирдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдПрдХ рдЫреЛрдЯрд╛ рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдФрд░ рдХрдо рд╕реЗ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░реБрдХрдирд╛ред
рдПрдХ рдЧреНрд░рд╛рдл рдПрдХ рдЧрдгрд┐рддреАрдп рдирд┐рд░реНрдорд╛рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЧреНрд░рд╛рдл рдореЗрдВ рдХреЛрдиреЗ (рдиреЛрдбреНрд╕) рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рд╛рде рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдордирдорд╛рдирд╛ рдЬреБрдбрд╝рд╛рд╡ рд╣реЛрддрд╛ рд╣реИред рдпреЗ рдХрдиреЗрдХреНрд╢рди рджрд┐рд╢рд╛рддреНрдордХ (рдЙрдиреНрдореБрдЦ) рдФрд░ рдЧреИрд░-рджрд┐рд╢рд╛рддреНрдордХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрдиреЗрдХреНрд╢рди рджреЛ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╣реИ рдФрд░ A тЖТ B рдХрдиреЗрдХреНрд╢рди B тЖТ A рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдХрдиреЗрдХреНрд╢рди рдХреА рдХреЛрдИ рджрд┐рд╢рд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдиреЗрдХреНрд╢рди рдПрдмреА рдФрд░ рдмреАрдП рд╕рдорд╛рди рд╣реИрдВред рдЗрди рдирд┐рдпрдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреЗрдбрд╝ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реЗрдЦрд╛рдВрдХрди рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрдиреЗрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдиреЛрдбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред
рдХрд╛рдЙрдВрдЯ рдХрд╛ рд╡рдЬрди рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рднрд╛рд░рд┐рдд рдЧреНрд░рд╛рдл рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ, рдПрдХ рдРрд╕рд╛ рдЧреНрд░рд╛рдл рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рднрд╛рд░ рд╣реЛрддрд╛ рд╣реИ (рдиреЛрдб рдП рд╕реЗ рдиреЛрдб рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рдХрд╛ "рдореВрд▓реНрдп")ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рдкрде, рдпрд╛ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рд╕рдмрд╕реЗ "рд╕рд╕реНрддреЗ" рдкрде рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред GoogleMap рдореЗрдВ рдкрде рдмрд┐рдЫрд╛рдиреЗ рдХреЛ рдареАрдХ рд╕реЗ рднрд╛рд░рд┐рдд рдЧреНрд░рд╛рдлрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрдЯреЙрдк рдХреА рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ (рдЫрд▓рд╛рдВрдЧ)
рдЧреНрд░рд╛рдлрд╝ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рджреЛ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╕реНрдЯреЙрдк рдХреА рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреЗрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣рд╛рдБ рдЧреНрд░рд╛рдл рджреЛ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ - рдЧрд╣рд░рд╛рдИ рдпрд╛ рдЪреМрдбрд╝рд╛рдИ рдореЗрдВ рдкреЗрдбрд╝ рдХреЛ рдкреАрдЫреЗ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЬрдм рд╣рдордиреЗ рдЦреЛрдЬ рдХреА рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдВрдЪ рдХреА рдереА, рдЕрдм рдЖрдЗрдП рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рджреЗрдЦреЗрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреНрд░рд╛рдл рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ:

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


рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ, рдиреЛрдбреНрд╕ рдХреЗ рдЪреМрд░рд╛рд╣реЗ рдкрд░, "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; }
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓рддреЗ рд╣реИрдВ:
рдЧрд┐рдирддреА рдкрд░ рдлрд┐рд░ рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ <?php $g = new Graph($graph);
рдпрджрд┐ рд╣рдо рдХрддрд╛рд░ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд╛рдИрдкрд╛рд╕ рдЧрд╣рд░рд╛рдИ рдореЗрдВ рд╣реЛрдЧрд╛ред
рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ
рдПрдХ рдФрд░ рдЖрдо рд╕рдорд╕реНрдпрд╛ рдХрд┐рд╕реА рднреА рджреЛ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рдХрд╛ рдЗрд╖реНрдЯрддрдо рд░рд╛рд╕реНрддрд╛ рдвреВрдВрдврдирд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ 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) {
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рджрд┐рдЬреНрдХреНрд╕реНрдЯреНрд░рд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдПрдХ рд╕рд░рд▓ рдЪреМрдбрд╝рд╛рдИ-рдкрд╣рд▓рд╛ рдЦреЛрдЬ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЖрдЗрдП рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ:
<?php $g = new Dijkstra($graph); $g->shortestPath('D', 'C');
рд╡рд╣ рд╕рдм рд╣реИред рдЗрд╕ рдкрд░, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рд╕рдВрд░рдЪрдирд╛рдУрдВ рдкрд░ рдЗрдЧреНрдиреЗрд╢рд┐рдпрд╕ рдЯреАрдУ рдХреЗ рд▓реЗрдЦ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдПред рдореИрдВ рдЙрди рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрддрд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдкрдврд╝рд╛, рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереА рдХрд┐ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд▓реЛрдЧ рдкрд╕рдВрджреАрджрд╛ рдореЗрдВ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкрд╕рдВрджреАрджрд╛ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдкреЛрд╕реНрдЯ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд░рд╣рддреЗ рд╣реИрдВ :)
рдпрд╣рд╛рдБ рд╕реЗ рдХреЙрдкреА рдХрд┐рдП
рдЧрдП рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣рд╛рдВ рд╕рд╛рдорд╛рдиреНрдп рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рдПрд╕рдкреАрдПрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЪреБрдирд╛рд╡ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХ рд╕рдВрдЪрд╛рд▓рди рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рджреВрд╕рд░реЗ + рдХрдо рдореЗрдореЛрд░реА рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдкреАрдПрдо рдкрд╛рда, рдЕрдиреБрд╡рд╛рдж, рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдЬрд╛рдирдХрд╛рд░реА, рд╕рд╛рде рд╣реА рдЕрднрд┐рдорд╛рдиреА рдЭреВрда рдореЗрдВ рдореЗрд░реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЪрд░реНрдЪрд╛ рдФрд░ рд▓реЗрдЦ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдж рдХреЗ рдкрд░рд┐рд╡рд░реНрдзрди рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреА рд╣реИрдВред