Miklix

ପିଏଚପିରେ ବିଚ୍ଛିନ୍ନ ସେଟ୍ (ୟୁନିୟନ-ଫାଇଣ୍ଡ ଆଲଗୋରିଦମ୍)

ପ୍ରକାଶିତ: 12:33:28 PM UTC ଠାରେ ଫେବୃଆରୀ 16, 2025

ଏହି ପ୍ରବନ୍ଧରେ ଡିସଜୋଏଣ୍ଟ ସେଟ୍ ଡାଟା ଢାଞ୍ଚାର ଏକ ପିଏଚ୍ପି କାର୍ଯ୍ୟକାରିତା ଅଛି, ଯାହା ସାଧାରଣତଃ ସର୍ବନିମ୍ନ ବ୍ୟାପକ ଗଛ ଆଲଗୋରିଦମ୍ ରେ ୟୁନିୟନ-ଫାଇଣ୍ଡ ପାଇଁ ବ୍ୟବହୃତ ହୁଏ।


ଏହି ପୃଷ୍ଠାକୁ ଅଧିକରୁ ଅଧିକ ଲୋକଙ୍କ ପାଖରେ ପହଞ୍ଚାଇବା ପାଇଁ ଇଂରାଜୀରୁ ମେସିନ୍ ଅନୁବାଦ କରାଯାଇଥିଲା। ଦୁର୍ଭାଗ୍ୟବଶତଃ, ମେସିନ୍ ଅନୁବାଦ ଏପର୍ଯ୍ୟନ୍ତ ଏକ ସିଦ୍ଧ ପ୍ରଯୁକ୍ତିବିଦ୍ୟା ନୁହେଁ, ତେଣୁ ତ୍ରୁଟି ହୋଇପାରେ। ଯଦି ଆପଣ ଚାହାଁନ୍ତି, ତେବେ ଆପଣ ଏଠାରେ ମୂଳ ଇଂରାଜୀ ସଂସ୍କରଣ ଦେଖିପାରିବେ:

Disjoint Set (Union-Find Algorithm) in PHP

ଡିସଜୋଏଣ୍ଟ ସେଟ୍ (ସାଧାରଣତଃ ୟୁନିୟନ-ଫାଇଣ୍ଡ ୍ ଏ.କେ.ଏ. ବିଚ୍ଛିନ୍ନ ସେଟ୍ ୟୁନିୟନ ପାଇଁ ବ୍ୟବହୃତ) ହେଉଛି ଏକ ଡାଟା ଢାଞ୍ଚା ଯାହା ଉପାଦାନଗୁଡିକୁ ବିଚ୍ଛିନ୍ନ (ଅଣ-ଓଭରଲେପିଂ) ସେଟ୍ ରେ ବିଭାଜନ ପରିଚାଳନା କରିବା ପାଇଁ ବ୍ୟବହୃତ ହୁଏ । ଏହା ଦୁଇଟି ପ୍ରମୁଖ ଅପରେସନକୁ ଦକ୍ଷତାର ସହ ସମର୍ଥନ କରେ:

  1. ଜାଣନ୍ତୁ: ଏକ ଉପାଦାନ କେଉଁ ସେଟ୍ ର ତାହା ନିର୍ଦ୍ଧାରଣ କରେ।
  2. ୟୁନିୟନ: ଦୁଇଟି ସେଟ୍ କୁ ଏକାଠି ମିଶ୍ରଣ କରନ୍ତୁ।

କ୍ରୁସ୍କଲର ଆଲଗୋରିଦମ୍ ପରି ସର୍ବନିମ୍ନ ବ୍ୟାପକ ବୃକ୍ଷ ଆଲଗୋରିଦମ୍ ରେ ଏହି ଢାଞ୍ଚା ବିଶେଷ ଭାବରେ ଉପଯୋଗୀ ଅଟେ ।

ମୋର କ୍ରୁସ୍କଲର ଆଲଗୋରିଦମର କାର୍ଯ୍ୟକାରିତା ଅଛି ଯାହା ରେଣ୍ଡମ୍ ମେଜ୍ ସୃଷ୍ଟି କରିବା ପାଇଁ ବ୍ୟବହୃତ ହୁଏ ଯାହା ସେଟ୍ ଗୁଡ଼ିକୁ ଦକ୍ଷତାର ସହ ମିଶ୍ରଣ କରିବା ପାଇଁ ଡିସଜୋଏଣ୍ଟ ସେଟ୍ ର ନିମ୍ନ ପିଏଚ୍ପି କାର୍ଯ୍ୟକାରିତା ଉପରେ ନିର୍ଭର କରେ । ଯଦି ଆପଣ ଆଗ୍ରହୀ ଅଟନ୍ତି, ତେବେ ଆପଣ ଏହାକୁ ଏଠାରେ କ୍ରିୟାରେ ଦେଖିପାରିବେ: କ୍ରସକାଲର ଆଲଗୋରିଦମ ମେଜ୍ ଜେନେରେଟର

ଯାହା ବି ହେଉ, ଏହା ହେଉଛି ଡିସଜୋଏଣ୍ଟ ସେଟ୍ ର ମୋର ପିଏଚ୍ପି କାର୍ଯ୍ୟକାରିତା:

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 ଏବଂ 3 ବନ୍ଧୁ ହେବା ଉଚିତ୍ ବୋଲି ପରାମର୍ଶ ଦେବା ଅର୍ଥପୂର୍ଣ୍ଣ ହେବ, କାରଣ ସେମାନଙ୍କ ମଧ୍ୟରେ ବ୍ୟକ୍ତି 2 ସମାନ।

ଅବଶ୍ୟ, ଏହି ପରି ଏକ ଛୋଟ ଉଦାହରଣରେ, ଆପଣ ନିଜେ ଏହି ସତ୍ୟକୁ ସହଜରେ ଚିହ୍ନଟ କରିପାରିବେ, କିନ୍ତୁ ଏହି ଆଲଗୋରିଦମର ଦକ୍ଷତା ଏହାକୁ କୋଟି କୋଟି ଲୋକ ଏବଂ ବନ୍ଧୁ ଗୋଷ୍ଠୀକୁ ସମ୍ଭବ କରିବାକୁ ଅନୁମତି ଦିଏ |

ବ୍ଲୁସ୍କିରେ ସେୟାର କରନ୍ତୁଫେସବୁକରେ ସେୟାର କରନ୍ତୁଲିଙ୍କଡିନ୍‌ରେ ସେୟାର୍‌ କରନ୍ତୁଟମ୍ବଲରରେ ସେୟାର କରନ୍ତୁX ରେ ସେୟାର କରନ୍ତୁଲିଙ୍କଡିନ୍‌ରେ ସେୟାର୍‌ କରନ୍ତୁପିନ୍ଟରେଷ୍ଟରେ ପିନ୍ କରନ୍ତୁ

ମିକେଲ୍ ବାଙ୍ଗ୍ କ୍ରିଷ୍ଟେନସେନ୍

ଲେଖକଙ୍କ ବିଷୟରେ

ମିକେଲ୍ ବାଙ୍ଗ୍ କ୍ରିଷ୍ଟେନସେନ୍
ମିକେଲ୍ ହେଉଛନ୍ତି miklix.com ର ସୃଷ୍ଟିକର୍ତ୍ତା ଏବଂ ମାଲିକ। ତାଙ୍କର ଜଣେ ବୃତ୍ତିଗତ କମ୍ପ୍ୟୁଟର ପ୍ରୋଗ୍ରାମର/ସଫ୍ଟୱେର୍ ଡେଭଲପର ଭାବରେ 20 ବର୍ଷରୁ ଅଧିକ ଅଭିଜ୍ଞତା ଅଛି ଏବଂ ସେ ବର୍ତ୍ତମାନ ଏକ ବଡ଼ ୟୁରୋପୀୟ IT କର୍ପୋରେସନରେ ପୂର୍ଣ୍ଣକାଳୀନ ନିଯୁକ୍ତି ପାଇଛନ୍ତି। ବ୍ଲଗ୍ ନ ଲେଖିବା ସମୟରେ, ସେ ତାଙ୍କର ଖାଲି ସମୟ ବିଭିନ୍ନ ପ୍ରକାରର ଆଗ୍ରହ, ହବି ଏବଂ କାର୍ଯ୍ୟକଳାପରେ ବିତାଇଥାନ୍ତି, ଯାହା କିଛି ପରିମାଣରେ ଏହି ୱେବସାଇଟରେ ଆବୃତ ବିଭିନ୍ନ ବିଷୟଗୁଡ଼ିକରେ ପ୍ରତିଫଳିତ ହୋଇପାରେ।