Data Structures

ڈیٹا اسٹرکچرز اور الگورتھمز کے موضوع پر ایک نظر

فرض کریں میں آپ کو قلم اور کاغذ پکڑا کر کہتا ہوں کہ آپ نے تین کام کرنے ہیں۔ (1) میں پچاس بندوں کے نام باری باری لکھواؤں گا انہیں آپ نے اس کاغذ پر لکھنا ہے۔ (2) اگر ضرورت پڑی تو میں آپ سے کہوں گا کہ فلاں بندے کا نام فہرست میں دیکھ کر بتائیں کہ وہ موجود ہے یا نہیں۔ (3) ضرورت پڑنے پر میں آپ سے کہوں گا کہ فلاں بندے کا نام فہرست سے نکال دیں۔ Data Structures and Algorithms کا موضوع ان تین کاموں کے گرد گھومتا ہے یعنی نیا ریکارڈ میموری میں اسٹور کرنا، مطلوبہ ریکارڈ تلاش کرنا، اور کوئی ریکارڈ ختم کرنا۔ مکمل تحریر

اررے لسٹ ڈیٹا اسٹرکچر

(1) اگر مجھ سے کہا جائے کہ ایک پروگرام بناؤں جس میں یوزر سے اس کے پسندیدہ پانچ رنگوں کے نام حاصل کر کے اسکرین پر دکھا دوں، تو میں یوں کروں گا کہ پانچ Variables بنا کر ان میں یوزر سے رنگوں کے نام حاصل کروں گا اور اسے اسکرین پر دکھا دوں گا۔ (2) اگر مجھ سے کہا جائے کہ ایسا پروگرام بناؤں جس میں کلاس کے پچاس اسٹوڈنٹس کے نام حاصل کر کے اسکرین پر دکھا دوں، تو میں ایک Array بناؤں گا جس کا سائز پچاس ہوگا اور اس میں اسٹوڈنٹس کے نام حاصل کر کے اسکرین پر دکھا دوں گا۔ (3) لیکن اگر مجھ سے کہا جائے کہ ایسا پروگرام بناؤں جس میں دنیا کے بڑے شہروں کے نام حاصل کر کے انہیں اسکرین پر دکھا دوں، البتہ پروگرام میں ڈیٹا انٹری شروع ہونے سے پہلے شہروں کی تعداد معلوم نہیں ہو سکتی، تو اب مجھے کیا کرنا چاہیے؟ مکمل تحریر

لنکڈ لسٹ ڈیٹا اسٹرکچر

اگر مجھ سے کہا جائے کہ ایک کمپیوٹر پروگرام بناؤں جو ایک لاکھ ویلیوز کو میموری میں اسٹور کر سکے، تو میں یوں کروں گا کہ اپنے پروگرام میں ایک Array بناؤں گا جس کا سائز ایک لاکھ ہوگا۔ البتہ اس سلسلہ میں یہ مسائل درپیش ہوں گے: (1) اگر کل ویلیوز صرف دس ہزار موصول ہوئیں تو اس دوران کمپیوٹر میموری کے بقیہ نوے ہزار خانے بغیر استعمال کے ریزرو رہیں گے۔ (2) اگر کل ویلیوز ایک لاکھ سے زیادہ آگئیں تو پھر ایک نیا اررے بنا کر پرانے اررے کی تمام ویلیوز اس میں منتقل کرنا پڑیں گی۔ (3) اگر اس اررے کی ویلیوز Sorted صورت میں میموری کے اندر موجود ہیں تو پھر ایک نئی ویلیو اس کی ترتیب کے اعتبار سے اررے کے بالکل درمیان میں شامل کرنے کے لیے اررے کی پچاس ہزار ویلیوز کو اپنی جگہ چھوڑ کر ایک ایک خانہ آگے منتقل ہونا پڑے گا۔ مکمل تحریر

اسکپ لسٹ ڈیٹا اسٹرکچر

اس سے پہلے ڈیٹا اسٹرکچرز کے تعارفی ٹٹوریل میں ہم نے Binary Search کے بارے میں بات کی تھی کہ اس کے تحت کسی خاص ترتیب میں موجود بڑے سے بڑے ڈیٹا میں سے مطلوبہ ویلیو چند کوششوں میں تلاش کی جا سکتی ہے۔ البتہ اس کی سہولت Array میں تو دستیاب ہوتی ہے لیکن Linked List میں یہ سہولت میسر نہیں ہوتی۔ اس کی وجہ یہ ہے کہ اررے کے تمام خانے میموری میں ایک ہی جگہ اکٹھے موجود ہوتے ہیں اور ہر خانے کا ایک انڈیکس نمبر ہوتا ہے، یعنی اررے کی پہلی اور آخری انڈیکس کی مدد سے اس کے درمیان والی انڈیکس معلوم کی جا سکتی ہے۔ چنانچہ اررے کی اسی خصوصیت کو استعمال کرتے ہوئے بائنری سرچ کے تحت اررے کو اس وقت تک دو حصوں میں تقسیم کیا جاتا رہتا ہے جب تک مطلوبہ ویلیو نہ مل جائے۔ مکمل تحریر

بائنری سرچ ٹری ڈیٹا اسٹرکچر

پچھلی چند تحریروں میں ہم نے Skip List, Linked List, Array List ڈیٹا اسٹرکچرز کا کچھ تعارف پیش کیا تھا۔ ان تینوں کو Linear کہا جاتا ہے، اس وجہ سے کہ کمپیوٹر میموری کے اندر یہ ڈیٹا اسٹرکچرز ایسے تسلسل کے ساتھ موجود ہوتے ہیں کہ لسٹ کا ہر آبجیکٹ اپنے سے اگلے اور پچھلے آبجیکٹ کے ساتھ منسلک ہوتا ہے۔ اس ٹٹوریل میں Binary Search Tree کے بارے میں بات کریں گے جو کہ Non-Linear ڈیٹا اسٹرکچر ہے، اور یہ دیکھیں گے کہ یہ کیسے کام کرتا ہے اور دیگر ڈیٹا اسٹرکچرز کے مقابلے اس کی نمایاں خصوصیت کیا ہے۔ مکمل تحریر

اے وی ایل ٹری ڈیٹا اسٹرکچر

پچھلے ٹٹوریل میں ہم نے دیکھا تھا کہ Binary Search Tree کو بنانے کے لیے اگر ترتیب شدہ ڈیٹا استعمال کیا جائے تو اس کی کارکردگی Linked List کے برابر ہو جاتی ہے۔ اس لیے یہ ضروری ہے کہ جس ڈیٹا کی مدد سے بائنری سرچ ٹری بنایا جا رہا ہے وہ Unsorted ہو کیونکہ اس سے ٹری کے دونوں جانب نوڈز اسٹورہوں گی جس کے نتیجے میں ٹری میں سے مطلوبہ ویلیو بہت تیز رفتاری کے ساتھ تلاش کی جا سکے گی۔ لیکن یہ ضروری نہیں ہے کہ کمپیوٹر پروگرام کو ہمیشہ غیر ترتیب شدہ ڈیٹا ہی ملے اس لیے اس صورتحال سے بچنے کی کوئی صورت ہونی چاہیے۔ چنانچہ اس مسئلہ کے حل کے طور پر AVL Tree متعارف کروایا گیا جو کہ دراصل ایک ایسا Binary Search Treeہے جس میں ٹری کو بیلنس کرنے کی اضافی خصوصیت شامل کی گئی ہے۔ مکمل تحریر

ریڈ بلیک ٹری ڈیٹا اسٹرکچر

اس سے قبل ایک تحریر میں ہم نے ذکر کیا تھا کہ Binary Search Tree میں سے مطلوبہ نوڈ بڑی تیز رفتاری کے ساتھ تلاش کی جا سکتی ہے کیونکہ اس کے لیے ٹری کی تمام نوڈز کے ساتھ مطلوبہ نوڈ کا موازنہ نہیں کرنا پڑتا، لیکن اگر بائنری سرچ ٹری کو ترتیب شدہ ڈیٹا کی مدد سے بنایا جائے تو یہ عملی طور پر Linked List بن جاتا ہے جس کی وجہ سے مطلوبہ نوڈ کی تلاش کے لیے ٹری کی تمام نوڈز کے ساتھ اس کا موازنہ لازمی ہو جاتا ہے۔ چنانچہ اس سے اگلی تحریر میں ہم نے AVL Tree کے متعلق بات کی تھی کہ وہ ایک ایسا بائنری سرچ ٹری ہے جس میں ٹری کو بیلنس کرنے کی اضافی خصوصیت شامل ہے۔ جبکہ اس تحریر میں ہم بائنری سرچ ٹری کے ایک اور ورژن Red Black Tree کے بارے میں بات کریں گے جس میں ٹری کو بیلنس کرنے کا ایک مختلف طریقہ اختیار گیا ہے۔ مکمل تحریر