# মডিউল ১০\_৩ঃ Find অপারেশন ইমপ্লিমেন্টেশন

এখন আমরা find অপারেশনটা ইমপ্লিমেন্ট করার চেষ্টা করব।

এটার জন্য আমরা কিছু নোড নিয়ে সেটার প্যারেন্ট এ্যারেটা একটু দেখিঃ

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FfSfnOthGMcYT7ciID0U7%2Fimage.png?alt=media&#x26;token=889fdd76-17b1-4de7-afab-d44dfcef3fdb" alt=""><figcaption></figcaption></figure>

এখানে ধর আমরা ২ এর লিডারকে জানতে চাইলাম। তাহলে আমরা ২ কে জিজ্ঞেস করব ওর প্যারেন্ট কে। এই ক্ষেত্রে সেটা ১। আমরা ১ এর জাছে যাবো আর তাকে জিজ্ঞেস করবো তার প্যারেন্ট কে। এই ক্ষেত্রে সে বলবে ৩। তারপর ৩ এর কাছে গিয়ে জিজ্ঞেস করব তার প্যারেন্ট কে। ৩ বলবে সে নিজেই কেননা তার প্যারেন্ট -১। তাহলে আমরা বুঝে যাব ৩ হলো লিডার।

```cpp
// Some code
int dsu_find(int node)
{
    if (par[node] == -1)
        return node;
    return dsu_find(par[node]);
}
```

উপরের ইমপ্লিমেন্টেশনের টাইম কমপ্লেক্সিটি O(N)|

এটাকে আরো অপ্টিমাইজ করে O(logn) করা সম্ভব। সেটি হচ্ছে আমরা যখন কোনো স্পেসিফিক নোড এর লিডার বের করব তখন সেইম গ্রুপের বাকি সকল এলিমেন্ট এর লিডার ও তাকে সেট করে দিব।&#x20;

যেমনঃ উপরের এক্সাম্পল্টা যদি নেই তখন আমরা ১ এর লিডার ৩ পাওয়ার পর ২ এর লিডার ও ৩ সেট করে দিব প্যারেন্ট এ্যারেতে।&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FoCOz3nZj3uCozPJBmfr6%2Fimage.png?alt=media&#x26;token=207d042b-5428-48f8-9f0d-214766673969" alt=""><figcaption></figcaption></figure>

```cpp
// Some code
int dsu_find(int node)
{
    if (par[node] == -1)
        return node;
    int leader = dsu_find(par[node]);
    par[node] = leader;
    return leader;
}
```
