Miklix

PHP இல் Disjoint Set (Union-Find Algorithm)

வெளியிடப்பட்டது: 16 பிப்ரவரி, 2025 அன்று பிற்பகல் 12:29:43 UTC

இந்த கட்டுரை டிஸ்ஜாயிண்ட் செட் தரவு கட்டமைப்பின் PHP செயல்படுத்தலைக் கொண்டுள்ளது, இது பொதுவாக குறைந்தபட்ச ஸ்பேனிங் மர வழிமுறைகளில் யூனியன்-ஃபைண்டிற்கு பயன்படுத்தப்படுகிறது.


இந்தப் பக்கம் முடிந்தவரை பலருக்கு அணுகக்கூடியதாக இருக்க வேண்டும் என்பதற்காக ஆங்கிலத்திலிருந்து இயந்திர மொழிபெயர்ப்பு செய்யப்பட்டது. துரதிர்ஷ்டவசமாக, இயந்திர மொழிபெயர்ப்பு இன்னும் முழுமையான தொழில்நுட்பமாக இல்லை, எனவே பிழைகள் ஏற்படலாம். நீங்கள் விரும்பினால், அசல் ஆங்கிலப் பதிப்பை இங்கே காணலாம்:

Disjoint Set (Union-Find Algorithm) in PHP

டிஸ்ஜாயிண்ட் செட் (பொதுவாக யூனியன்-ஃபைண்ட் அல்லது டிஸ்ஜாயிண்ட் செட் யூனியனுக்குப் பயன்படுத்தப்படுகிறது) என்பது உறுப்புகளின் பிரிவினையை டிஸ்ஜாயிண்ட் (ஒன்றுடன் ஒன்று அல்லாத) கணங்களாக நிர்வகிக்கப் பயன்படுத்தப்படும் தரவு கட்டமைப்பாகும். இது இரண்டு முக்கிய செயல்பாடுகளை திறமையாக ஆதரிக்கிறது:

  1. கண்டுபிடி: ஒரு உறுப்பு எந்த தொகுப்பைச் சேர்ந்தது என்பதை தீர்மானிக்கிறது.
  2. ஒன்றியம்: இரண்டு தொகுப்புகளை ஒன்றாக இணைக்கிறது.

க்ருஸ்கலின் அல்காரிதம் போன்ற குறைந்தபட்ச ஸ்பேனிங் மர வழிமுறைகளில் இந்த அமைப்பு குறிப்பாக பயனுள்ளதாக இருக்கும்.

சீரற்ற பிரமைகளை உருவாக்குவதற்குப் பயன்படுத்தப்படும் க்ருஸ்கலின் வழிமுறையின் செயல்படுத்தல் என்னிடம் உள்ளது, இது செட்களை திறம்பட ஒன்றிணைக்க டிஸ்ஜாயிண்ட் செட்டின் கீழே உள்ள PHP செயல்படுத்தலை நம்பியுள்ளது. நீங்கள் ஆர்வமாக இருந்தால், அதை இங்கே செயலில் காணலாம்: க்ருஸ்கலின் அல்காரிதம் பிரமை ஜெனரேட்டர்

எப்படியிருந்தாலும், இது எனது PHP செயல்படுத்தல் 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]++;
            }
        }
    }
}

வேடிக்கைக்காக பிரமைகளை உருவாக்குவதைத் தவிர, டிஸ்ஜாயிண்ட் செட் தரவு அமைப்பு நிச்சயமாக நிஜ வாழ்க்கை காட்சிகளுக்கும் பயன்படுத்தப்படலாம்.

உதாரணமாக, அதன் பயனர்களுக்கு புதிய நண்பர்களை பரிந்துரைக்க விரும்பும் ஒரு சமூக வலைப்பின்னலை கற்பனை செய்து பாருங்கள், பின்னர் இந்த நண்பர் உறவுகளுடன் ஆறு பேர் ஏற்கனவே உள்ளனர் என்று சொல்லலாம்:

  • 1 மற்றும் 2 இருவரும் நண்பர்கள்.
  • 2 மற்றும் 3 இருவரும் நண்பர்கள்.
  • 4 மற்றும் 5 பேர் நண்பர்கள்.
  • 6 பேருக்கு நண்பர்கள் இல்லை.

இந்த தனித்தனி குழுக்களுக்கு யூனியன்-ஃபைண்ட் வழிமுறையைப் பயன்படுத்தினால், பின்வருவனவற்றை நாம் கண்டுபிடிக்க வேண்டும்:

  • ஒரு குழுவில் 1, 2 மற்றும் 3.
  • இரண்டாவது குழுவில் 4 மற்றும் 5.
  • மூன்றாவது குழுவில் 6.

இதன் அடிப்படையில், 1 மற்றும் 3 நண்பர்களாக மாற வேண்டும் என்று பரிந்துரைப்பது அர்த்தமுள்ளதாக இருக்கும், ஏனென்றால் அவர்களுக்கு பொதுவான நபர் 2 உள்ளது.

நிச்சயமாக, இது போன்ற ஒரு சிறிய எடுத்துக்காட்டில், இந்த உண்மையை நீங்களே எளிதாகக் கண்டறிய முடியும், ஆனால் இந்த வழிமுறையின் செயல்திறன் பில்லியன் கணக்கான மக்கள் மற்றும் நண்பர் குழுக்களுக்கு சாத்தியமான அளவில் அளவிட அனுமதிக்கிறது.

ப்ளூஸ்கையில் பகிரவும்பேஸ்புக்கில் பகிரவும்LinkedIn இல் பகிரவும்Tumblr இல் பகிரவும்X இல் பகிரவும்LinkedIn இல் பகிரவும்பின்டரஸ்டில் பின் செய்யவும்

மிக்கேல் பேங் கிறிஸ்டென்சன்

எழுத்தாளர் பற்றி

மிக்கேல் பேங் கிறிஸ்டென்சன்
மிக்கல் என்பவர் miklix.com இன் படைப்பாளர் மற்றும் உரிமையாளர் ஆவார். அவருக்கு 20 ஆண்டுகளுக்கும் மேலான தொழில்முறை கணினி நிரலாளர்/மென்பொருள் உருவாக்குநராக அனுபவம் உள்ளது, மேலும் தற்போது ஒரு பெரிய ஐரோப்பிய ஐடி நிறுவனத்தில் முழுநேரப் பணியாளராக உள்ளார். வலைப்பதிவு செய்யாதபோது, ​​அவர் தனது ஓய்வு நேரத்தை பரந்த அளவிலான ஆர்வங்கள், பொழுதுபோக்குகள் மற்றும் செயல்பாடுகளில் செலவிடுகிறார், இது இந்த வலைத்தளத்தில் உள்ளடக்கப்பட்ட பல்வேறு தலைப்புகளில் ஓரளவுக்கு பிரதிபலிக்கக்கூடும்.