Isethi engahlangene (i-Union-Find Algorithm) ku-PHP
Kushicilelwe: 16 Pébruari 2025 jam 12.34.57 UTC
Lesi sihloko sibonisa ukuqaliswa kwe-PHP yesakhiwo sedatha ye-Disjoint Set, evame ukusetshenziselwa i-Union-Find ku-algorithms encane yemithi ye-spanning.
Disjoint Set (Union-Find Algorithm) in PHP
I-Disjoint Set (evame ukusetshenziselwa i-Union-Find a.k.a. Disjoint Set Union) isakhiwo sedatha esisetshenziselwa ukuphatha ukwahlukanisa izakhi zibe ngamasethi angahlangene (non-overlapping). Isekela imisebenzi emibili esemqoka kahle:
- Thola: Inquma ukuthi iyiphi into ebekiwe efanele.
- Union: Ihlanganisa amasethi amabili ndawonye.
Lesi sakhiwo siwusizo ikakhulukazi kuma-algorithms amancane omuthi we-spanning, njenge-algorithm kaKruskal.
Nginokuqaliswa kwe-algorithm ye-Kruskal esetshenziselwa ukukhiqiza ama-mazes angahleliwe ancike ekusetshenzisweni kwe-PHP engezansi ye-Disjoint Set ukuhlanganisa kahle amasethi. Uma unentshisekelo, ungayibona isenzo lapha: Kruskal sika Algorithm Maze Generator
Nakanjani, lokhu ukuqaliswa kwami kwe-PHP ye-Disjoint Set:
{
private $parent = [];
private $rank = [];
public function __construct($size)
{
for ($i = 0; $i < $size; $i++)
{
$this->parent[$i] = $i;
$this->rank[$i] = 0;
}
}
public function find($x)
{
if ($this->parent[$x] != $x)
{
$this->parent[$x] = $this->find($this->parent[$x]);
}
return $this->parent[$x];
}
public function union($x, $y)
{
$rootX = $this->find($x);
$rootY = $this->find($y);
if ($rootX != $rootY)
{
if ($this->rank[$rootX] > $this->rank[$rootY])
{
$this->parent[$rootY] = $rootX;
}
elseif ($this->rank[$rootX] < $this->rank[$rootY])
{
$this->parent[$rootX] = $rootY;
}
else
{
$this->parent[$rootY] = $rootX;
$this->rank[$rootX]++;
}
}
}
}
Ngaphandle kokukhiqiza ama-mazes wokuzijabulisa, isakhiwo sedatha ye-Disjoint Set ngokuqinisekile singasetshenziselwa nezimo zokuphila kwangempela.
Cabanga, isibonelo, inethiwekhi yomphakathi engathanda ukuphakamisa abangane abasha kubasebenzisi bayo, bese ake sithi sinabantu abayisithupha abanabo lobu budlelwane bomngane kakade endaweni:
- 1 no-2 bangabangane.
- 2 no-3 bangabangane.
- 4 no-5 bangabangane.
- I-6 ayinabo abangane.
Ukusebenzisa i-algorithm ye-Union-Find kula maqembu ahlukene, kufanele sithole okulandelayo:
- 1, 2 no-3 eqenjini elilodwa.
- 4 no-5 eqenjini lesibili.
- 6 eqenjini lesithathu.
Ngokusekelwe kulokhu, kungaba nomqondo ukuphakamisa ukuthi u-1 no-3 kufanele babe abangane, ngoba banomuntu 2 ofanayo.
Yiqiniso, esibonelweni esincane esifana nalesi, ungase ubone kalula leli qiniso ngokwakho, kodwa ukusebenza kahle kwale algorithm kuvumela ukuthi kungenzeka ukukala izigidigidi zabantu namaqembu omngane.