Miklix

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.


Leli khasi lihunyushwe ngomshini lisuka esiNgisini ukuze lenze lifinyeleleke kubantu abaningi ngangokunokwenzeka. Ngeshwa, ukuhumusha ngomshini akukabi ubuchwepheshe obuphelele, ngakho-ke amaphutha angenzeka. Uma uthanda, ungabuka inguqulo yokuqala yesiNgisi lapha:

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:

  1. Thola: Inquma ukuthi iyiphi into ebekiwe efanele.
  2. 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:

class DisjointSet
{
    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.

Yabelana ku-BlueskyYabelana ku-FacebookYabelana ku-LinkedInYabelana ku-TumblrYabelana ku-XYabelana ku-LinkedInPhina ku-Pinterest

Mikkel Bang Christensen

Mayelana Nombhali

Mikkel Bang Christensen
U-Mikkel ungumdali nomnikazi we-miklix.com. Unesipiliyoni seminyaka engaphezu kwengu-20 njengochwepheshe bezinhlelo zekhompyutha/unjiniyela wesoftware futhi njengamanje uqashwe ngokugcwele enkampanini enkulu ye-IT yaseYurophu. Lapho engabhali, uchitha isikhathi sakhe sokuphumula ezintweni eziningi azithandayo, azilibazisa, nemisebenzi, okungenzeka ngokwezinga elithile ibonakale ezihlokweni ezihlukahlukene ezitholakala kule webhusayithi.