Miklix

Isethi engahlangene (i-Union-Find Algorithm) ku-PHP

Kushicilelwe: Februwari 16, 2025 12:34:57 UTC
Igcine ukubuyekezwa: Januwari 26, 2026 10:37:18 UTC

Le ndatshana ifaka ukuqaliswa kwe-PHP kwesakhiwo sedatha se-Disjoint Set, esivame ukusetshenziselwa i-Union-Find kuma-algorithms amancane esihlahla.


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 aka Disjoint Set Union) isakhiwo sedatha esisetshenziselwa ukuphatha ukwahlukaniswa kwezakhi zibe ngamasethi angahlanganisiwe (angahlanganisiwe). Isekela imisebenzi emibili ebalulekile ngempumelelo:

  1. Thola: Nquma ukuthi iyiphi isethi yesakhiwo.
  2. I-Union: Ihlanganisa amasethi amabili ndawonye.

Lesi sakhiwo siwusizo kakhulu kuma-algorithms amancane esihlahla, njenge-algorithm ye-Kruskal.

Nginokuqaliswa kwe-algorithm ye-Kruskal esetshenziselwa ukukhiqiza ama-mazes angahleliwe ancike ekuqalisweni kwe-PHP engezansi kwe-Disjoint Set ukuhlanganisa amasethi. Uma unesithakazelo, ungayibona isenzo lapha: Kruskal sika Algorithm Maze Generator

Noma kunjalo, nakhu ukuqaliswa kwami kwe-PHP kwe-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 se-Disjoint Set singasetshenziswa nasezimweni zangempela.

Ake ucabange, ngokwesibonelo, inethiwekhi yokuxhumana nabantu engathanda ukuphakamisa abangane abasha kubasebenzisi bayo, bese sithi sinabantu abayisithupha abanobudlelwano bobungani obuvele bukhona:

  • I-1 no-2 bangabangane.
  • 2 no-3 bangabangane.
  • 4 no-5 bangabangane.
  • 6 Awunabo abangane.

Ukusebenzisa i-algorithm ye-Union-Find kula maqembu ahlukene, kufanele sithole okulandelayo:

  • I-1, 2 ne-3 eqenjini elilodwa.
  • 4 no-5 eqenjini lesibili.
  • 6 eqenjini lesithathu.

Ngokusekelwe kulokhu, kungaba nengqondo ukuphakamisa ukuthi u-1 no-3 kufanele babe abangane, ngoba banomuntu u-2 ngokufanayo.

Vele, esibonelweni esincane esinjengalesi, ungalibona kalula leli qiniso ngokwakho, kepha ukusebenza kahle kwale algorithm kuyivumela ukuthi ifinyelele ezigidini zabantu namaqembu abangane.

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

Mikkel Christensen

Mayelana Nombhali

Mikkel 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.