تعارف
ایک ہلچل سے بھرے ہوائی اڈے کا تصور کریں جہاں ہر منٹ میں پروازیں اڑان بھرتی اور اترتی ہیں۔ جس طرح ہوائی ٹریفک کنٹرولرز ہنگامی بنیادوں پر پروازوں کو ترجیح دیتے ہیں، اسی طرح ہیپس ہمیں مخصوص معیار کی بنیاد پر ڈیٹا کا انتظام کرنے اور اس پر کارروائی کرنے میں مدد کرتے ہیں، اس بات کو یقینی بناتے ہوئے کہ ڈیٹا کا سب سے زیادہ "فوری" یا "اہم" حصہ ہمیشہ سب سے اوپر قابل رسائی ہو۔
اس گائیڈ میں، ہم زمین سے ڈھیروں کو سمجھنے کے لیے ایک سفر کا آغاز کریں گے۔ ہم ڈھیر کیا ہیں اور ان کی موروثی خصوصیات کو ظاہر کرکے شروع کریں گے۔ وہاں سے، ہم ازگر کے اپنے ہیپس کے نفاذ میں غوطہ لگائیں گے۔
heapq
ماڈیول، اور اس کی خصوصیات کے بھرپور سیٹ کو دریافت کریں۔ لہذا، اگر آپ نے کبھی سوچا ہے کہ ڈیٹا کے ایک متحرک سیٹ کو مؤثر طریقے سے کیسے منظم کیا جائے جہاں سب سے زیادہ (یا سب سے کم) ترجیحی عنصر کی کثرت سے ضرورت ہوتی ہے، تو آپ علاج کے لیے تیار ہیں۔
ہیپ کیا ہے؟
ڈھیروں کے استعمال میں غوطہ لگانے سے پہلے آپ جس چیز کو سمجھنا چاہیں گے وہ ہے۔ ایک ڈھیر کیا ہے. اعداد و شمار کے ڈھانچے کی دنیا میں ایک ڈھیر درخت پر مبنی پاور ہاؤس کے طور پر نمایاں ہے، خاص طور پر ترتیب اور درجہ بندی کو برقرار رکھنا. اگرچہ یہ غیر تربیت یافتہ آنکھ سے بائنری درخت سے مشابہت رکھتا ہے، لیکن اس کی ساخت اور حکمرانی کے قواعد میں باریکیاں اسے واضح طور پر الگ کرتی ہیں۔
ایک ڈھیر کی وضاحتی خصوصیات میں سے ایک اس کی نوعیت ہے a مکمل بائنری درخت. اس کا مطلب یہ ہے کہ درخت کی ہر سطح، شاید آخری کو چھوڑ کر، مکمل طور پر بھری ہوئی ہے۔ اس آخری سطح کے اندر، نوڈس بائیں سے دائیں آباد ہوتے ہیں۔ اس طرح کا ڈھانچہ اس بات کو یقینی بناتا ہے کہ ڈھیروں کو صفوں یا فہرستوں کا استعمال کرتے ہوئے مؤثر طریقے سے نمائندگی اور ہیرا پھیری کی جا سکتی ہے، جس میں صف میں ہر عنصر کی پوزیشن درخت میں اس کی جگہ کی عکاسی کرتی ہے۔
تاہم، ڈھیر کی اصل جوہر اس میں مضمر ہے۔ حکم. ایک ___ میں زیادہ سے زیادہ ڈھیر, کسی بھی نوڈ کی قدر اس کے بچوں کی قدروں کو پیچھے چھوڑتی ہے یا اس کے مساوی ہوتی ہے، سب سے بڑے عنصر کو جڑ کے دائیں طرف رکھتا ہے۔ دوسری طرف، اے منٹ کا ڈھیر مخالف اصول پر کام کرتا ہے: کسی بھی نوڈ کی قدر یا تو اس کے بچوں کی قدروں سے کم یا اس کے برابر ہوتی ہے، اس بات کو یقینی بناتے ہوئے کہ سب سے چھوٹا عنصر جڑ میں بیٹھتا ہے۔
مشورہ: آپ ایک ہیپ کو بطور تصور کر سکتے ہیں۔ نمبروں کا پرامڈ. زیادہ سے زیادہ ڈھیر کے لیے، جیسے ہی آپ بنیاد سے چوٹی پر چڑھتے ہیں، تعداد بڑھتی جاتی ہے، جس کا اختتام چوٹی پر زیادہ سے زیادہ قدر ہوتا ہے۔ اس کے برعکس، ایک منٹ کا ڈھیر اپنی چوٹی پر کم از کم قدر کے ساتھ شروع ہوتا ہے، جب آپ نیچے کی طرف جاتے ہیں تو نمبر بڑھتے جاتے ہیں۔
جیسے جیسے ہم ترقی کرتے ہیں، ہم گہرائی میں جائیں گے کہ ڈھیروں کی یہ موروثی خصوصیات کس طرح موثر کارروائیوں کو قابل بناتی ہیں اور کیسے ازگر کی heapq
ماڈیول بغیر کسی رکاوٹ کے ڈھیروں کو ہماری کوڈنگ کی کوششوں میں ضم کرتا ہے۔
ہیپس کی خصوصیات اور خواص
ہیپس، اپنی منفرد ساخت اور ترتیب دینے والے اصولوں کے ساتھ، الگ الگ خصوصیات اور خصوصیات کا ایک سیٹ سامنے لاتے ہیں جو انہیں مختلف کمپیوٹیشنل منظرناموں میں انمول بناتے ہیں۔
سب سے پہلے اور سب سے اہم، ڈھیر ہیں فطری طور پر موثر. ان کا درخت پر مبنی ڈھانچہ، خاص طور پر مکمل بائنری ٹری فارمیٹ، اس بات کو یقینی بناتا ہے کہ ترجیحی عناصر (زیادہ سے زیادہ یا کم سے کم) کو داخل کرنے اور نکالنے جیسے کام عام طور پر لوگارتھمک وقت میں کیے جا سکتے ہیں۔ O (log n). یہ کارکردگی الگورتھم اور ایپلیکیشنز کے لیے ایک اعزاز ہے جن کو ترجیحی عناصر تک بار بار رسائی کی ضرورت ہوتی ہے۔
ڈھیروں کی ایک اور قابل ذکر خاصیت ان کی ہے۔ میموری کی کارکردگی. چونکہ بچے یا پیرنٹ نوڈس کے لیے واضح پوائنٹرز کی ضرورت کے بغیر ہیپس کو صفوں یا فہرستوں کا استعمال کرتے ہوئے دکھایا جا سکتا ہے، اس لیے وہ جگہ کی بچت کرتے ہیں۔ صف میں ہر عنصر کی پوزیشن درخت میں اس کی جگہ کے مساوی ہے، جو پیشین گوئی کے قابل اور سیدھی سیدھی ٹراورسل اور ہیرا پھیری کی اجازت دیتی ہے۔
ہیپس کی ترتیب دینے والی خاصیت، چاہے زیادہ سے زیادہ ہیپ ہو یا کم سے کم ہیپ، اس بات کو یقینی بناتی ہے۔ جڑ ہمیشہ سب سے زیادہ ترجیح کا عنصر رکھتی ہے۔. یہ مستقل ترتیب وہی ہے جو پورے ڈھانچے کو تلاش کیے بغیر اولین ترجیحی عنصر تک فوری رسائی کی اجازت دیتی ہے۔
مزید برآں، ڈھیر ہیں ورسٹائل. اگرچہ بائنری ہیپس (جہاں ہر والدین کے زیادہ سے زیادہ دو بچے ہوتے ہیں) سب سے زیادہ عام ہیں، ڈھیروں کو دو سے زیادہ بچے پیدا کرنے کے لیے عام کیا جا سکتا ہے، جسے کہا جاتا ہے۔ d-ary ڈھیر. یہ لچک مخصوص استعمال کے معاملات اور کارکردگی کی ضروریات کی بنیاد پر ٹھیک ٹیوننگ کی اجازت دیتی ہے۔
آخر میں، ڈھیر ہیں خود کو ایڈجسٹ کرنا. جب بھی عناصر کو شامل یا ہٹایا جاتا ہے، ساخت اپنی خصوصیات کو برقرار رکھنے کے لیے خود کو دوبارہ ترتیب دیتا ہے۔ یہ متحرک توازن اس بات کو یقینی بناتا ہے کہ ہیپ ہر وقت اپنے بنیادی کاموں کے لیے موزوں رہے۔
مشورہ: ان خصوصیات نے ہیپ ڈیٹا کے ڈھانچے کو ایک موثر ترتیب دینے والے الگورتھم - ہیپ کی ترتیب کے لیے موزوں بنا دیا۔ Python میں ہیپ کی ترتیب کے بارے میں مزید جاننے کے لیے، ہمارا پڑھیں "ازگر میں ڈھیر کی ترتیب" مضمون.
جیسا کہ ہم Python کے نفاذ اور عملی ایپلی کیشنز میں گہرائی میں جائیں گے، ڈھیروں کی حقیقی صلاحیت ہمارے سامنے آ جائے گی۔
ڈھیروں کی اقسام
تمام ڈھیر برابر نہیں بنائے جاتے ہیں۔ ان کی ترتیب اور ساختی خصوصیات کی بنیاد پر، ڈھیروں کو مختلف اقسام میں تقسیم کیا جا سکتا ہے، ہر ایک کی اپنی ایپلی کیشنز اور فوائد کے ساتھ۔ دو اہم زمرے ہیں۔ زیادہ سے زیادہ ڈھیر اور منٹ کا ڈھیر.
کی سب سے ممتاز خصوصیت a زیادہ سے زیادہ ڈھیر یہ ہے کہ کسی بھی نوڈ کی قدر اس کے بچوں کی قدروں سے زیادہ یا اس کے برابر ہے۔ یہ یقینی بناتا ہے کہ ہیپ میں سب سے بڑا عنصر ہمیشہ جڑ میں رہتا ہے۔ اس طرح کا ڈھانچہ خاص طور پر مفید ہے جب زیادہ سے زیادہ عنصر تک کثرت سے رسائی کی ضرورت ہو، جیسا کہ بعض ترجیحی قطار کے نفاذ میں۔
زیادہ سے زیادہ ہیپ کا ہم منصب، a منٹ کا ڈھیر اس بات کو یقینی بناتا ہے کہ کسی بھی نوڈ کی قدر اس کے بچوں کی قدروں سے کم یا برابر ہو۔ یہ ڈھیر کے سب سے چھوٹے عنصر کو جڑ میں رکھتا ہے۔ کم سے کم ڈھیر ان منظرناموں میں انمول ہوتے ہیں جہاں کم سے کم عنصر بنیادی اہمیت کا حامل ہوتا ہے، جیسے کہ الگورتھم میں جو ریئل ٹائم ڈیٹا پروسیسنگ سے نمٹتے ہیں۔
ان بنیادی زمروں کے علاوہ، ڈھیروں کو ان کے برانچنگ فیکٹر کی بنیاد پر بھی پہچانا جا سکتا ہے:
اگرچہ بائنری ہیپس سب سے زیادہ عام ہیں، ہر والدین کے زیادہ سے زیادہ دو بچے ہوتے ہیں، ہیپس کے تصور کو دو سے زیادہ بچوں والے نوڈس تک بڑھایا جا سکتا ہے۔ ایک ___ میں d-ary ڈھیر، ہر نوڈ میں زیادہ سے زیادہ ہوتا ہے۔ d
بچے. اس تغیر کو مخصوص منظرناموں کے لیے بہتر بنایا جا سکتا ہے، جیسے کہ کچھ کاموں کو تیز کرنے کے لیے درخت کی اونچائی کو کم کرنا۔
بائنومیل ہیپ binomial درختوں کا ایک مجموعہ ہے جو بار بار بیان کیا جاتا ہے۔ بائنومیئل ہیپس ترجیحی قطار کے نفاذ میں استعمال ہوتے ہیں اور موثر انضمام کی کارروائیاں پیش کرتے ہیں۔
مشہور فبونیکی ترتیب کے نام پر رکھا گیا ہے۔ فبونیکی ڈھیر بائنری یا binomial heaps کے مقابلے میں بہت سے آپریشنز کے لیے بہتر طور پر طے شدہ رننگ ٹائم پیش کرتا ہے۔ وہ نیٹ ورک کی اصلاح کے الگورتھم میں خاص طور پر مفید ہیں۔
ازگر کے ڈھیر پر عمل درآمد - The heapq ماڈیول
پائتھون ہیپ آپریشنز کے لیے ایک بلٹ ان ماڈیول پیش کرتا ہے۔ heapq
ماڈیول یہ ماڈیول ہیپ سے متعلق افعال کا ایک مجموعہ فراہم کرتا ہے جو ڈویلپرز کو فہرستوں کو ڈھیروں میں تبدیل کرنے اور اپنی مرضی کے نفاذ کی ضرورت کے بغیر مختلف ہیپ آپریشنز کرنے کی اجازت دیتا ہے۔ آئیے اس ماڈیول کی باریکیوں میں غوطہ لگائیں اور یہ آپ کو ڈھیروں کی طاقت کیسے لاتا ہے۔
۔ heapq
ماڈیول ایک الگ ہیپ ڈیٹا کی قسم فراہم نہیں کرتا ہے۔ اس کے بجائے، یہ ایسے فنکشنز پیش کرتا ہے جو Python کی باقاعدہ فہرستوں پر کام کرتے ہیں، ان کو تبدیل کرتے ہیں اور ان کا علاج کرتے ہیں۔ بائنری ڈھیر.
یہ نقطہ نظر میموری کے لحاظ سے موثر ہے اور ازگر کے موجودہ ڈیٹا ڈھانچے کے ساتھ بغیر کسی رکاوٹ کے مربوط ہے۔
اس کا مطلب ہے کہ ڈھیروں کو فہرستوں کے طور پر دکھایا گیا ہے۔ in heapq
. اس نمائندگی کی خوبصورتی اس کی سادگی ہے - صفر پر مبنی فہرست انڈیکس کا نظام ایک مضمر بائنری درخت کے طور پر کام کرتا ہے۔ پوزیشن پر کسی بھی عنصر کے لیے i
اس کا:
- لیفٹ چائلڈ پوزیشن پر ہے۔
2*i + 1
- صحیح بچہ پوزیشن پر ہے۔
2*i + 2
- پیرنٹ نوڈ پوزیشن پر ہے۔
(i-1)//2
یہ مضمر ڈھانچہ اس بات کو یقینی بناتا ہے کہ علیحدہ نوڈ پر مبنی بائنری ٹری کی نمائندگی کی ضرورت نہیں ہے، آپریشن کو سیدھا اور میموری کا استعمال کم سے کم کرتا ہے۔
خلائی پیچیدگی: ہیپس کو عام طور پر بائنری ٹری کے طور پر لاگو کیا جاتا ہے لیکن چائلڈ نوڈس کے لیے واضح پوائنٹرز کے ذخیرہ کی ضرورت نہیں ہوتی ہے۔ یہ انہیں خلائی پیچیدگی کے ساتھ خلائی موثر بناتا ہے۔ اے (ن) این عناصر کو ذخیرہ کرنے کے لیے۔
یہ نوٹ کرنا ضروری ہے کہ heapq
ماڈیول ڈیفالٹ کے لحاظ سے کم از کم ڈھیر بناتا ہے۔. اس کا مطلب ہے کہ سب سے چھوٹا عنصر ہمیشہ جڑ میں ہوتا ہے (یا فہرست میں پہلی پوزیشن)۔ اگر آپ کو زیادہ سے زیادہ ہیپ کی ضرورت ہے، تو آپ کو عناصر کو اس سے ضرب دے کر ترتیب کو الٹنا ہوگا۔ -1
یا حسب ضرورت موازنہ فنکشن استعمال کریں۔
ازگر کا heapq
ماڈیول فنکشنز کا ایک مجموعہ فراہم کرتا ہے جو ڈویلپرز کو فہرستوں پر مختلف ہیپ آپریشن کرنے کی اجازت دیتا ہے۔
نوٹ: استعمال کرنے کے لئے heapq
آپ کی درخواست میں ماڈیول، آپ کو اسے آسان استعمال کرکے درآمد کرنے کی ضرورت ہوگی۔ import heapq
.
مندرجہ ذیل حصوں میں، ہم ان بنیادی کارروائیوں میں سے ہر ایک کی گہرائی میں غوطہ لگائیں گے، ان کے میکانکس اور استعمال کے معاملات کو تلاش کریں گے۔
فہرست کو ڈھیر میں کیسے تبدیل کریں۔
۔ heapify()
فنکشن بہت سے ہیپ سے متعلق کاموں کا نقطہ آغاز ہے۔ یہ ایک قابل تکرار (عام طور پر ایک فہرست) لیتا ہے اور ایک منٹ کے ڈھیر کی خصوصیات کو پورا کرنے کے لئے اپنے عناصر کو جگہ جگہ دوبارہ ترتیب دیتا ہے:
بہترین طرز عمل، صنعت کے لیے منظور شدہ معیارات، اور چیٹ شیٹ کے ساتھ Git سیکھنے کے لیے ہمارے ہینڈ آن، عملی گائیڈ کو دیکھیں۔ گوگلنگ گٹ کمانڈز کو روکیں اور اصل میں سیکھ یہ!
import heapq data = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
heapq.heapify(data)
print(data)
یہ دوبارہ ترتیب دی گئی فہرست کو آؤٹ پٹ کرے گا جو ایک درست منٹ ہیپ کی نمائندگی کرتا ہے:
[1, 1, 2, 3, 3, 9, 4, 6, 5, 5, 5]
وقت کی پیچیدگی: کا استعمال کرتے ہوئے ایک غیر ترتیب شدہ فہرست کو ہیپ میں تبدیل کرنا heapify
فنکشن ایک ہے اے (ن) آپریشن یہ متضاد معلوم ہو سکتا ہے، جیسا کہ کوئی اس کی توقع کر سکتا ہے۔ O (nlogn)، لیکن درخت کی ساخت کی خصوصیات کی وجہ سے، یہ لکیری وقت میں حاصل کیا جا سکتا ہے۔
ڈھیر میں عنصر کیسے شامل کریں۔
۔ heappush()
فنکشن آپ کو ہیپ کی خصوصیات کو برقرار رکھتے ہوئے ہیپ میں ایک نیا عنصر داخل کرنے کی اجازت دیتا ہے:
import heapq heap = []
heapq.heappush(heap, 5)
heapq.heappush(heap, 3)
heapq.heappush(heap, 7)
print(heap)
کوڈ کو چلانے سے آپ کو کم سے کم ہیپ پراپرٹی کو برقرار رکھنے والے عناصر کی فہرست ملے گی۔
[3, 5, 7]
وقت کی پیچیدگی: ہیپ میں داخل کرنے کا عمل، جس میں ہیپ پراپرٹی کو برقرار رکھتے ہوئے ہیپ میں ایک نیا عنصر رکھنا شامل ہے، اس میں وقت کی پیچیدگی ہوتی ہے O (لاگ آن). اس کی وجہ یہ ہے کہ، بدترین صورت میں، عنصر کو پتی سے جڑ تک سفر کرنا پڑ سکتا ہے۔
ڈھیر سے سب سے چھوٹے عنصر کو کیسے ہٹائیں اور واپس کریں۔
۔ heappop()
فنکشن ہیپ سے سب سے چھوٹے عنصر کو نکالتا ہے اور واپس کرتا ہے (ایک منٹ کے ڈھیر میں جڑ)۔ ہٹانے کے بعد، یہ یقینی بناتا ہے کہ فہرست ایک درست ڈھیر بنی رہے:
import heapq heap = [1, 3, 5, 7, 9]
print(heapq.heappop(heap))
print(heap)
نوٹ: ۔ heappop()
الگورتھم میں انمول ہے جس کے لیے صعودی ترتیب میں پروسیسنگ عناصر کی ضرورت ہوتی ہے، جیسے ہیپ سورٹ الگورتھم، یا ترجیحی قطاروں کو لاگو کرتے وقت جہاں کاموں کو ان کی عجلت کی بنیاد پر انجام دیا جاتا ہے۔
یہ سب سے چھوٹا عنصر اور باقی فہرست کو آؤٹ پٹ کرے گا:
1
[3, 7, 5, 9]
یہاں، 1
سے سب سے چھوٹا عنصر ہے۔ heap
، اور بقیہ فہرست نے ہیپ پراپرٹی کو برقرار رکھا ہے، ہمارے ہٹانے کے بعد بھی 1
.
وقت کی پیچیدگی: جڑ عنصر کو ہٹانا (جو ایک منٹ کے ڈھیر میں سب سے چھوٹا یا زیادہ سے زیادہ ڈھیر میں سب سے بڑا ہے) اور ڈھیر کو دوبارہ ترتیب دینے میں بھی وقت لگتا ہے O (لاگ آن) وقت.
کسی نئی آئٹم کو کیسے پش کریں اور سب سے چھوٹی آئٹم کو پاپ کریں۔
۔ heappushpop()
فنکشن ایک مشترکہ آپریشن ہے جو ایک نئی شے کو ڈھیر پر دھکیلتا ہے اور پھر ڈھیر سے سب سے چھوٹی چیز کو پاپ کرکے واپس کرتا ہے:
import heapq heap = [3, 5, 7, 9]
print(heapq.heappushpop(heap, 4)) print(heap)
یہ پیداوار کرے گا 3
، سب سے چھوٹا عنصر، اور نئے کو پرنٹ کریں۔ heap
فہرست جس میں اب شامل ہے۔ 4
ہیپ پراپرٹی کو برقرار رکھتے ہوئے:
3
[4, 5, 7, 9]
نوٹ: یہاں heappushpop()
فنکشن ایک نئے عنصر کو آگے بڑھانے اور سب سے چھوٹے کو الگ سے پاپ کرنے کے آپریشنز کرنے سے زیادہ موثر ہے۔
سب سے چھوٹی چیز کو کیسے تبدیل کریں اور ایک نئی چیز کو آگے بڑھائیں۔
۔ heapreplace()
فنکشن سب سے چھوٹے عنصر کو پاپ کرتا ہے اور ایک نئے عنصر کو ڈھیر پر دھکیلتا ہے، یہ سب ایک موثر آپریشن میں:
import heapq heap = [1, 5, 7, 9]
print(heapq.heapreplace(heap, 4))
print(heap)
یہ پرنٹ کرتا ہے۔ 1
، سب سے چھوٹا عنصر، اور فہرست میں اب 4 شامل ہیں اور ہیپ پراپرٹی کو برقرار رکھتا ہے:
1
[4, 5, 7, 9]
نوٹ: heapreplace()
سٹریمنگ منظرناموں میں فائدہ مند ہے جہاں آپ موجودہ سب سے چھوٹے عنصر کو نئی قدر سے بدلنا چاہتے ہیں، جیسے رولنگ ونڈو آپریشنز یا ریئل ٹائم ڈیٹا پروسیسنگ کے کاموں میں۔
ازگر کے ڈھیر میں متعدد انتہاؤں کو تلاش کرنا
nlargest(n, iterable[, key])
اور nsmallest(n, iterable[, key])
فنکشنز کو ایک تکراری سے ایک سے زیادہ بڑے یا چھوٹے عناصر کو بازیافت کرنے کے لیے ڈیزائن کیا گیا ہے۔ جب آپ کو صرف چند انتہائی قدروں کی ضرورت ہوتی ہے تو وہ پورے تکراری کو چھانٹنے سے زیادہ کارآمد ثابت ہوسکتے ہیں۔ مثال کے طور پر، کہتے ہیں کہ آپ کے پاس درج ذیل فہرست ہے اور آپ فہرست میں تین سب سے چھوٹی اور تین بڑی قدریں تلاش کرنا چاہتے ہیں:
data = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
یہاں، nlargest()
اور nsmallest()
افعال کام آ سکتے ہیں:
import heapq data = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
print(heapq.nlargest(3, data)) print(heapq.nsmallest(3, data))
اس سے آپ کو دو فہرستیں ملیں گی - ایک میں تین سب سے بڑی قدریں ہوں گی اور دوسری میں تین سب سے چھوٹی اقدار ہوں گی۔ data
فہرست:
[9, 6, 5]
[1, 1, 2]
اپنی مرضی کے مطابق ڈھیر کیسے بنائیں
جبکہ ازگر کا heapq
ماڈیول ہیپس کے ساتھ کام کرنے کے لیے ٹولز کا ایک مضبوط سیٹ فراہم کرتا ہے، ایسے حالات موجود ہیں جہاں ڈیفالٹ منٹ ہیپ رویہ کافی نہ ہو۔ چاہے آپ زیادہ سے زیادہ ہیپ کو لاگو کرنے کے خواہاں ہوں یا کسی ایسے ہیپ کی ضرورت ہو جو حسب ضرورت موازنہ کے افعال کی بنیاد پر کام کرے، حسب ضرورت ہیپ بنانا اس کا جواب ہو سکتا ہے۔ آئیے دریافت کریں کہ ڈھیروں کو مخصوص ضروریات کے مطابق کیسے بنایا جائے۔
کا استعمال کرتے ہوئے ایک میکس ہیپ کو لاگو کرنا heapq
ڈیفالٹ کی طرف سے، heapq
پیدا منٹ کے ڈھیر. تاہم، ایک سادہ چال کے ساتھ، آپ اسے زیادہ سے زیادہ ہیپ کو لاگو کرنے کے لیے استعمال کر سکتے ہیں۔ خیال عناصر کی ترتیب کو ان سے ضرب دے کر الٹنا ہے۔ -1
انہیں ڈھیر میں شامل کرنے سے پہلے:
import heapq class MaxHeap: def __init__(self): self.heap = [] def push(self, val): heapq.heappush(self.heap, -val) def pop(self): return -heapq.heappop(self.heap) def peek(self): return -self.heap[0]
اس نقطہ نظر کے ساتھ، سب سے بڑی تعداد (مطلق قدر کے لحاظ سے) سب سے چھوٹی بن جاتی ہے، جس کی اجازت دیتا ہے۔ heapq
زیادہ سے زیادہ ہیپ ڈھانچے کو برقرار رکھنے کے افعال۔
حسب ضرورت موازنہ افعال کے ساتھ ہیپس
بعض اوقات، آپ کو ایک ڈھیر کی ضرورت پڑ سکتی ہے جو صرف عناصر کی قدرتی ترتیب کی بنیاد پر موازنہ نہیں کرتا ہے۔ مثال کے طور پر، اگر آپ پیچیدہ اشیاء کے ساتھ کام کر رہے ہیں یا آپ کے پاس ترتیب دینے کے مخصوص معیار ہیں، تو حسب ضرورت موازنہ کا فنکشن ضروری ہو جاتا ہے۔
اس کو حاصل کرنے کے لیے، آپ ایسے عناصر کو مددگار کلاس میں لپیٹ سکتے ہیں جو موازنہ آپریٹرز کو اوور رائیڈ کرتا ہے:
import heapq class CustomElement: def __init__(self, obj, comparator): self.obj = obj self.comparator = comparator def __lt__(self, other): return self.comparator(self.obj, other.obj) def custom_heappush(heap, obj, comparator=lambda x, y: x < y): heapq.heappush(heap, CustomElement(obj, comparator)) def custom_heappop(heap): return heapq.heappop(heap).obj
اس سیٹ اپ کے ساتھ، آپ کسی بھی کسٹم کمپیریٹر فنکشن کی وضاحت کر سکتے ہیں اور اسے ہیپ کے ساتھ استعمال کر سکتے ہیں۔
نتیجہ
ہیپس بہت سے آپریشنز کے لیے قابل قیاس کارکردگی پیش کرتے ہیں، جو انہیں ترجیح پر مبنی کاموں کے لیے ایک قابل اعتماد انتخاب بناتے ہیں۔ تاہم، درخواست کی مخصوص ضروریات اور خصوصیات پر غور کرنا ضروری ہے۔ کچھ صورتوں میں، ہیپ کے نفاذ کو موافق بنانا یا متبادل ڈیٹا ڈھانچے کا انتخاب کرنے سے حقیقی دنیا کی بہتر کارکردگی حاصل ہو سکتی ہے۔
ہیپس، جیسا کہ ہم نے سفر کیا ہے، صرف ایک اور ڈیٹا ڈھانچہ سے زیادہ ہیں۔ وہ کارکردگی، ساخت، اور موافقت کے سنگم کی نمائندگی کرتے ہیں۔ ان کی بنیادی خصوصیات سے لے کر ازگر میں ان کے نفاذ تک heapq
ماڈیول، ہیپس بے شمار کمپیوٹیشنل چیلنجز کا ایک مضبوط حل پیش کرتے ہیں، خاص طور پر وہ ترجیحات کے ارد گرد مرکوز ہیں۔
- SEO سے چلنے والا مواد اور PR کی تقسیم۔ آج ہی بڑھا دیں۔
- پلیٹو ڈیٹا ڈاٹ نیٹ ورک ورٹیکل جنریٹو اے آئی۔ اپنے آپ کو بااختیار بنائیں۔ یہاں تک رسائی حاصل کریں۔
- پلیٹوآئ اسٹریم۔ ویب 3 انٹیلی جنس۔ علم میں اضافہ۔ یہاں تک رسائی حاصل کریں۔
- پلیٹو ای ایس جی۔ کاربن، کلین ٹیک، توانائی ، ماحولیات، شمسی، ویسٹ مینجمنٹ یہاں تک رسائی حاصل کریں۔
- پلیٹو ہیلتھ۔ بائیوٹیک اینڈ کلینیکل ٹرائلز انٹیلی جنس۔ یہاں تک رسائی حاصل کریں۔
- ماخذ: https://stackabuse.com/guide-to-heaps-in-python/
- : ہے
- : ہے
- : نہیں
- :کہاں
- $UP
- 1
- 10
- 11
- 12
- 13
- 14
- 15٪
- 20
- 7
- 8
- 9
- a
- ہمارے بارے میں
- مطلق
- تک رسائی حاصل
- قابل رسائی
- حاصل
- حاصل کیا
- اصل میں
- شامل کریں
- شامل کیا
- انہوں نے مزید کہا
- فوائد
- کے بعد
- AIR
- ہوائی اڈے
- انتباہ
- یلگورتم
- یلگوردمز
- تمام
- کی اجازت
- اجازت دے رہا ہے
- کی اجازت دیتا ہے
- بھی
- متبادل
- ہمیشہ
- an
- اور
- ایک اور
- جواب
- کوئی بھی
- علاوہ
- درخواست
- ایپلی کیشنز
- نقطہ نظر
- کیا
- ارد گرد
- لڑی
- مضمون
- AS
- چڑھ جانا
- At
- توازن
- بیس
- کی بنیاد پر
- BE
- خوبصورتی
- کیونکہ
- ہو جاتا ہے
- اس سے پہلے
- رویے
- فائدہ مند
- بہتر
- سرحد
- دونوں
- لانے
- لاتا ہے
- تعمیر
- عمارت
- تعمیر میں
- ہلچل
- لیکن
- by
- کر سکتے ہیں
- کیس
- مقدمات
- اقسام
- مرکوز
- کچھ
- چیلنجوں
- خصوصیات
- بچے
- بچوں
- انتخاب
- طبقے
- کوڈ
- کوڈنگ
- مجموعہ
- مل کر
- کس طرح
- کامن
- موازنہ
- مقابلے میں
- موازنہ
- مکمل
- پیچیدہ
- پیچیدگی
- کمپیوٹیشنل
- تصور
- اختتام
- سنگم
- غور کریں
- متواتر
- پر مشتمل ہے
- اس کے برعکس
- تبدیل کرنا
- کور
- مساوی ہے
- کاؤنٹر پارٹ
- بنائی
- پیدا
- معیار
- اختتامی
- موجودہ
- اپنی مرضی کے
- اعداد و شمار
- ڈیٹا پروسیسنگ
- ڈیٹا کی ساخت
- نمٹنے کے
- گہری
- گہرے
- پہلے سے طے شدہ
- وضاحت
- کی وضاحت
- وضاحت
- ڈیلے
- منحصر ہے
- ڈیزائن
- ڈویلپرز
- مختلف
- مختلف
- واضح طور پر
- جانبدار
- ڈوبکی
- ڈائیونگ
- نہیں
- ڈان
- دو
- متحرک
- ہر ایک
- کارکردگی
- ہنر
- مؤثر طریقے سے
- یا تو
- عنصر
- عناصر
- سوار ہونا
- کو چالو کرنے کے
- کوششیں
- یقینی بناتا ہے
- کو یقینی بنانے ہے
- پوری
- مکمل
- برابر
- برابر
- خاص طور پر
- جوہر
- ضروری
- بھی
- کبھی نہیں
- ہر کوئی
- مثال کے طور پر
- اس کے علاوہ
- پھانسی
- موجودہ
- توقع ہے
- تلاش
- ایکسپلور
- نکالنے
- نچوڑ۔
- انتہائی
- انتہائی
- آنکھ
- عنصر
- مشہور
- نمایاں کریں
- چند
- فیبوناکی
- بھرے
- مل
- پہلا
- فٹ
- لچک
- پروازیں
- توجہ مرکوز
- کے بعد
- کے لئے
- اہم ترین
- فارمیٹ
- آگے
- بنیاد پرست
- بار بار اس
- اکثر
- سے
- تقریب
- افعال
- افعال
- بنیادی
- جاؤ
- دے دو
- دی
- اچھا
- گورننگ
- زیادہ سے زیادہ
- گراؤنڈ
- رہنمائی
- ہاتھ
- ہاتھوں پر
- موبائل
- ہے
- ہونے
- اونچائی
- مدد
- سب سے زیادہ
- کی ڈگری حاصل کی
- ہور
- کس طرح
- کیسے
- تاہم
- HTTPS
- آئکن
- خیال
- if
- پر عملدرآمد
- نفاذ
- عمل درآمد
- عملدرآمد
- پر عمل درآمد
- درآمد
- اہمیت
- اہم
- in
- شامل
- شامل ہیں
- اضافہ
- انڈکس
- ذاتی، پیدائشی
- مثال کے طور پر
- کے بجائے
- انٹیگریٹٹس
- میں
- تعارف
- انمول
- IT
- میں
- خود
- سفر
- صرف
- کلیدی
- جانا جاتا ہے
- لینڈنگ
- سب سے بڑا
- آخری
- جانیں
- سیکھنے
- کم سے کم
- چھوڑ دیا
- کم
- دو
- سطح
- LG
- جھوٹ ہے
- کی طرح
- لسٹ
- فہرستیں
- ll
- لاگ ان کریں
- تلاش
- سب سے کم
- بنا
- مین
- برقرار رکھنے کے
- برقرار رکھنے
- برقرار رکھتا ہے
- بنا
- بناتا ہے
- بنانا
- انتظام
- جوڑی
- ہیرا پھیری
- بہت سے
- میکس
- زیادہ سے زیادہ
- کا مطلب ہے کہ
- میکینکس
- یاد داشت
- ضم کریں
- شاید
- منٹ
- کم سے کم
- کم سے کم
- منٹ
- آئینہ کرنا
- ماڈیول
- زیادہ
- زیادہ موثر
- سب سے زیادہ
- منتقل
- ایک سے زیادہ
- ضرب لگانا
- ہزارہا
- قدرتی
- فطرت، قدرت
- ضرورت ہے
- ضرورت
- ضروریات
- نیٹ ورک
- نئی
- نہیں
- نوڈ
- نوڈس
- قابل ذکر
- اب
- شیڈنگ
- تعداد
- تعداد
- اشیاء
- of
- بند
- پیش کرتے ہیں
- تجویز
- on
- ایک
- صرف
- پر
- چل رہا ہے
- آپریشن
- آپریشنز
- آپریٹرز
- اس کے برعکس
- اصلاح کے
- اصلاح
- or
- حکم
- دیگر
- ہمارے
- باہر
- پیداوار
- خود
- خاص طور پر
- چوٹی
- انجام دیں
- کارکردگی
- کارکردگی
- کارکردگی کا مظاہرہ
- شاید
- ٹکڑا
- شیطانی
- پلیسمیںٹ
- رکھ
- پلاٹا
- افلاطون ڈیٹا انٹیلی جنس
- پلیٹو ڈیٹا
- پوائنٹ
- پاپ آؤٹ
- ٹمٹمانے
- پوزیشن
- پوزیشننگ
- پوزیشنوں
- ممکنہ
- طاقت
- بجلی گھر
- عملی
- پیش قیاسی
- پرائمری
- وزیر اعظم
- اصول
- اصولوں پر
- پرنٹ
- پرنٹس
- ترجیح دیں
- ترجیح
- عمل
- پروسیسنگ
- پیش رفت
- خصوصیات
- جائیداد
- فراہم
- فراہم کرتا ہے
- پش
- دھکا
- دھکیلنا
- ازگر
- فوری
- RE
- پڑھیں
- حقیقی دنیا
- اصل وقت
- اصل وقت کا ڈیٹا
- باقاعدہ
- قابل اعتماد
- باقی
- باقی
- ہٹانے
- ہٹا
- ہٹا دیا گیا
- کو ہٹانے کے
- تنظیم نو
- کی جگہ
- کی نمائندگی
- نمائندگی
- نمائندگی
- کی نمائندگی کرتا ہے
- کی ضرورت
- ضروریات
- واپسی
- واپسی
- امیر
- ٹھیک ہے
- رنگ
- مضبوط
- رولنگ
- جڑ
- قوانین
- چل رہا ہے
- s
- کا کہنا ہے کہ
- منظرنامے
- بغیر کسی رکاوٹ کے
- تلاش کریں
- سیکشنز
- لگتا ہے
- SELF
- علیحدہ
- تسلسل
- کام کرتا ہے
- مقرر
- سیٹ اپ
- شیڈو
- شیٹ
- سادہ
- سادگی
- بعد
- بیٹھتا ہے
- ہنر مند
- So
- حل
- کچھ
- خلا
- مخصوص
- خاص طور پر
- تیزی
- Stackabuse
- معیار
- کھڑا ہے
- شروع کریں
- شروع
- شروع ہوتا ہے
- بند کرو
- ذخیرہ
- ذخیرہ کرنے
- براہ راست
- محرومی
- ساختی
- ساخت
- ڈھانچوں
- اس طرح
- سویٹ
- SVG
- کے نظام
- درزی
- لیتا ہے
- لینے
- کاموں
- شرائط
- سے
- کہ
- ۔
- دنیا
- ان
- ان
- تو
- وہاں.
- یہ
- وہ
- بات
- اس
- ان
- تین
- کے ذریعے
- وقت
- اوقات
- کرنے کے لئے
- اوزار
- سب سے اوپر
- ٹریفک
- تبدیل
- تبدیل
- منتقلی
- سفر
- علاج
- علاج
- درخت
- درخت
- سچ
- tweaking
- دو
- قسم
- اقسام
- عام طور پر
- سمجھ
- منفرد
- فوری طور پر
- فوری
- us
- استعمال
- استعمال کی شرائط
- استعمال کیا جاتا ہے
- کا استعمال کرتے ہوئے
- درست
- قیمت
- اقدار
- مختلف
- Ve
- تصور کرنا
- چاہتے ہیں
- we
- کیا
- جب
- جب بھی
- چاہے
- جس
- جبکہ
- گے
- ونڈو
- ساتھ
- کے اندر
- بغیر
- کام
- کام کر
- دنیا
- بدترین
- لپیٹو
- X
- پیداوار
- تم
- اور
- زیفیرنیٹ