جاوا میں اعداد و شمار کے اعلی ڈھانچے اور الگورتھم جو آپ کو جاننے کی ضرورت ہے



جاوا میں ڈیٹا سٹرکچر اور الگورتھم پر یہ بلاگ آپ کو جاوا میں موجود تمام اہم ڈیٹا ڈھانچے اور الگورتھم کو سمجھنے میں مدد دے گا۔

اگر مجھے سافٹ ویئر ڈویلپمنٹ میں ایک اہم ترین موضوع چننا پڑتا ہے تو ، یہ ڈیٹا ڈھانچے اور الگورتھم ہوگا۔ آپ اسے ہر کمپیوٹر پروگرامر کے لئے دستیاب بنیادی ٹول کے طور پر سوچ سکتے ہیں۔ پروگرامنگ کے دوران ، ہم استعمال کرتے ہیں ڈیٹا ڈھانچے ڈیٹا کو اسٹور اور منظم کرنے کے لئے ، اور الگورتھم ان ڈھانچے میں ڈیٹا کو جوڑنے کے ل. اس مضمون میں تمام عام ڈیٹا ڈھانچے اور اس میں موجود الگورتھم کا تفصیلی جائزہ ہے تاکہ قارئین کو اچھی طرح سے آراستہ ہوجائے۔

اس مضمون میں زیر بحث عنوانات ذیل میں درج ہیں۔





جاوا میں ڈیٹا سٹرکچرز

ڈیٹا کا ڈھانچہ کمپیوٹر میں ڈیٹا کو اسٹور اور آرگنائز کرنے کا ایک طریقہ ہے تاکہ اس کا موثر استعمال کیا جاسکے۔ یہ بڑی مقدار میں ڈیٹا کو موثر طریقے سے انتظام کرنے کا ایک ذریعہ فراہم کرتا ہے۔ اور موثر ڈیٹا سٹرکچر موثر الگورتھم ڈیزائن کرنے کی کلید ہیں۔

میںجاوا میں اس ‘ڈیٹا سٹرکچر اور الگورتھم’ مضمون میں ، ہم بنیادی ڈیٹا ڈھانچے کا احاطہ کرنے جارہے ہیں جیسے:



آئیے ان میں سے ہر ایک کو چیک کرتے ہیں۔

جاوا میں لکیری ڈیٹا سٹرکچرز

میں لکیری ڈیٹا ڈھانچے کیا وہ ہیں جن کے عناصر ترتیب وار ہیں اور ایک طرح سے ترتیب دیئے گئے ہیں کہ: صرف ایک ہی ہے پہلا عنصر اور صرف ایک ہے اگلا عنصر ، وہاں صرف ایک ہے آخری عنصر اور صرف ایک ہے پچھلا عنصر ، جبکہ دوسرے تمام عناصر میں ایک ہے اگلے اور ایک پچھلا عنصر

ارے

ایک سرنی ایک لکیری ڈیٹا ڈھانچہ ہےاسی طرح کے عناصر کے ایک گروپ کی نمائندگی ، جس تک انڈیکس تک رسائی حاصل ہو۔ ڈیٹا کو ذخیرہ کرنے سے پہلے کسی سرنی کا سائز ضرور فراہم کرنا چاہئے۔ ایک سرنی کی خصوصیات ذیل میں درج ہیں۔



جاوا میں isa اور hasa تعلقات
  • ایک صف میں موجود ہر عنصر ایک جیسے اعداد و شمار کا ہوتا ہے اور اس کا سائز ایک ہی ہوتا ہے
  • صف کے عنصر چھوٹی میموری کے سب سے چھوٹے مقام سے شروع ہونے والی پہلی عنصر کے ساتھ ملحق میموری کے مقامات پر محفوظ ہوتے ہیں
  • صف کے عناصر کو تصادفی طور پر حاصل کیا جاسکتا ہے
  • سرنی ڈیٹا کا ڈھانچہ مکمل طور پر متحرک نہیں ہے

اری - ایڈیورکا

مثال کے طور پر ، ہم ایک ویڈیو گیم اس کھیل کے ل ten ٹاپ دس اسکور پر نظر رکھنے کے لئے چاہتے ہیں۔ اس کے بجائے دس مختلف استعمال کریں متغیر اس کام کے ل we ، ہم پورے گروپ کے لئے ایک ہی نام استعمال کرسکتے ہیں اور اس گروپ میں اعلی اسکورز کا حوالہ دینے کے لئے انڈیکس نمبر استعمال کرسکتے ہیں۔

لنکڈ لسٹ

TO ایک سے زیادہ نوڈس کے جمع کرنے کے ساتھ ایک لکیری ڈیٹا ڈھانچہ ہے ، جہاں ایاچ عنصر اپنا ڈیٹا اور اگلے عنصر کے مقام کی نشاندہی کرتا ہے۔ منسلک فہرست میں آخری لنک کالعدم کی طرف اشارہ کرتا ہے ، جو سلسلہ کا اختتام ہوتا ہے۔ منسلک فہرست میں موجود عنصر کو a کہتے ہیں نوڈ . پہلے نوڈ کو کہا جاتا ہے سر .آخری نوڈ کہا جاتا ہے دم .

لنکڈ لسٹ کی اقسام

اکیلا لنکڈ لسٹ (یونی ڈائرکشنل)

دوگنا لنکڈ لسٹ (دو طرفہ)

سرکلر لنکڈ لسٹ

یہاں ایک سادہ سی مثال ہے۔ ایک منسلک فہرست کا تصور کریں جیسے پیپرکلپس کی زنجیر جو آپس میں منسلک ہے۔ آپ آسانی سے اوپر یا نیچے ایک اور پیپر کلپ شامل کرسکتے ہیں۔ بیچ میں ایک ڈالنا بھی جلدی ہے۔ آپ کو صرف وسط میں زنجیر منقطع کرنے ، نیا پیپرکلپ شامل کرنے ، پھر دوسرے آدھے کو دوبارہ جوڑنے کے لئے کرنا ہے۔ ایک منسلک فہرست بھی اسی طرح کی ہے۔

اسٹیکس

اسٹیک ، خلاصہ ڈیٹا ڈھانچہ ، کا ایک مجموعہ ہے اشیاء جو داخل اور خارج کردیئے گئے ہیں آخری میں سب سے پہلے آؤٹ (LIFO) اصول. کسی بھی وقت اشیاء کو کسی اسٹیک میں داخل کیا جاسکتا ہے ، لیکن صرف حال ہی میں داخل کیا گیا (یعنی 'آخری') آبجیکٹ کسی بھی وقت ختم کیا جاسکتا ہے۔اسٹیک کی خصوصیات ذیل میں درج ہیں۔

  • یہ ایک آرڈرڈ فہرست ہے جس میںاندراج اور حذف صرف ایک سرے پر انجام دیا جاسکتا ہے جسے کہا جاتا ہے سب سے اوپر
  • اعداد و شمار کی تکرار کو اس کے اول عنصر کی نشاندہی کرنے والے کے ساتھ
  • کے پیچھے ہے آخری میں سب سے پہلے آؤٹ (LIFO) اصول
  • دو انتہائی بنیادی طریقوں کی حمایت کرتا ہے
    • دھکا (ای): اسٹیک کے اوپری حصے میں عنصر ای داخل کریں
    • پاپ (): اسٹیک پر اوپری عنصر کو ہٹا دیں اور واپس کریں

کسی لفظ کو تبدیل کرتے وقت اسٹیک کی عملی مثالوں میں شامل ہیں،کی درستگی چیک کرنے کے لئے قوسینترتیب ،براؤزرز اور بہت زیادہ میں واپس فعالیت کو نافذ کرنا۔

قطاریں

خلاصہ ڈیٹا ڈھانچہ کی ایک اور قسم بھی ہے۔ کسی اسٹیک کے برخلاف ، قطار میں اشیاء کا ایک مجموعہ ہے جو اس کے مطابق داخل اور ہٹا دیا جاتا ہے سب سے پہلے آؤٹ (FIFO) اصول. یعنی ، عناصر کو کسی بھی وقت داخل کیا جاسکتا ہے ، لیکن صرف عنصر جو قطار میں سب سے زیادہ طویل عرصے سے رہا ہے کسی بھی وقت ختم کیا جاسکتا ہے۔ذیل میں ایک قطار کی خصوصیات ہیں۔

  • اکثر کہا جاتا ہے پہلے میں سب سے پہلے آؤٹ فہرست
  • دو انتہائی بنیادی طریقوں کی حمایت کرتا ہے
    • enqueue (e): پر عنصر ای داخل کریں پیچھے قطار کی
    • dequeue (): عنصر کو ہٹائیں اور واپس کریں سامنے قطار کی

قطار میں استعمال کیا جاتا ہےدو پروسیس ، سی پی یو شیڈولنگ ، ڈسک شیڈولنگ اور دیگر حالات کے مابین اعداد و شمار کی غیر متزلزل منتقلی جہاں متعدد صارفین میں وسائل مشترکہ ہوتے ہیں اور پہلے سرور کی بنیاد پر پیش کیے جاتے ہیں۔ اس کے بعد ‘جاوا میں ڈیٹا سٹرکچر اور الگورتھم’ مضمون میں ، ہمارے پاس اعداد و شمار کے ڈھانچے ہیں۔

جاوا میں درجہ بندی کے اعداد و شمار کے ڈھانچے

ثنائی درخت

ثنائی درخت ہے aدرجہ بندی کے درخت کے اعداد و شمار کے ڈھانچے جس میں ہر نوڈ میں زیادہ سے زیادہ دو بچے ہوتے ہیں ، جس کے طور پر کہا جاتا ہے بائیں بچے اور صحیح بچے . ہر بائنری درخت میں مندرجہ ذیل نوڈس گروپ ہوتے ہیں:

  • روٹ نوڈ: یہ سب سے اوپر کا نوڈ ہوتا ہے اور اکثر اسے نوڈ کہا جاتا ہےکیونکہ دوسرے تمام نوڈس کو جڑ سے پہنچا جاسکتا ہے
  • بائیں ذیلی درخت ، جو بائنری درخت بھی ہے
  • دائیں سب درخت ، جو بائنری درخت بھی ہے

بائنری درخت کی خصوصیات ذیل میں درج ہیں۔

  • ایک بائنری درخت کو دو طریقوں سے دیکھا جاسکتا ہے۔
    • گہرائی پہلا ٹراورسال : ترتیب میں (بائیں سے جڑ سے دائیں) ، پری آرڈر (جڑ سے بائیں دائیں) اور پوسٹ آرڈر (بائیں دائیں سے جڑ)
    • چوتھا پہلا ٹراورسال : لیول آرڈر ٹراورسال
  • درختوں کی گزرنے کی وقت کی پیچیدگی: O (n)
  • لیول ‘l’ = 2 پر نوڈس کی زیادہ سے زیادہ تعدادl-1.

بائنری درختوں کی درخواستوں میں شامل ہیں:

  • بہت سے سرچ ایپلی کیشنز میں استعمال کیا جاتا ہے جہاں ڈیٹا مستقل طور پر داخل / چھوڑ رہا ہوتا ہے
  • بصری اثرات کے ل digital ڈیجیٹل امیجوں کو کمپوز کرنے کے ایک ورک فلو کے طور پر
  • روٹر ٹیبلز کو اسٹور کرنے کیلئے تقریبا almost ہر ہائی بینڈوتھ روٹر میں استعمال ہوتا ہے
  • وائرلیس نیٹ ورکنگ اور میموری مختص کرنے میں بھی استعمال ہوتا ہے
  • کمپریشن الگورتھم اور بہت کچھ میں استعمال ہوتا ہے

ثنائی کے ڈھیر

ثنائی کے ڈھیر ایک مکمل ہےبائنری ٹری، جو ڈھیر پراپرٹی کو جواب دیتا ہے۔ آسان الفاظ میںبائنری درخت کی مختلف خصوصیات میں مندرجہ ذیل خصوصیات ہیں۔

  • ڈھیر ایک مکمل بائنری درخت ہے: کسی درخت کو مکمل کہا جاتا ہے اگر اس کی تمام سطحیں ، سوائے ممکنہ طور پر گہری کے ، مکمل ہوجائیں۔ ٹیاس کی ثنائی کے ڈھیر کی جائیداد اسے مناسب بناتی ہے کہ کسی اسٹوریج میں رکھا جائے .
  • ڈھیر پراپرٹی کے بعد: ایک ثنائی کے ڈھیر یا تو ایک ہے کم سے کم یا ایک زیادہ سے زیادہ .
    • کم سے کم ثنائی کے ڈھیر: ایفیا ڈھیر میں ہر نوڈ ، نوڈ کی قدر ہوتی ہے سے کم یا اس کے برابر بچوں کی اقدار
    • زیادہ سے زیادہ ثنائی کے ڈھیر: ایفیا ڈھیر میں ہر نوڈ ، نوڈ کی قدر ہوتی ہے سے زیادہ یا اس کے برابر بچوں کی اقدار

بائنری ہیپ کی مقبول ایپلی کیشنز میں شامل ہیںموثر ترجیحی قطاروں پر عمل درآمد ، ایک صف میں اور سب سے زیادہ K عناصر کو موثر انداز میں تلاش کریں۔

ہیش میزیں

ذرا تصور کریں کہ آپ کے پاس چیز اور آپ تلاش کرنا بہت آسان بنانے کے لئے اس کی ایک چابی تفویض کرنا چاہتے ہیں۔ اس کلید / ویلیو جوڑی کو اسٹور کرنے کے ل you ، آپ ڈیٹا سٹرکچر کی طرح ایک سادہ سرنی استعمال کرسکتے ہیں جہاں ڈیٹا کی قدروں کو اسٹور کرنے کے لئے بٹن (اشارے) کو براہ راست انڈیکس کے طور پر استعمال کیا جاسکتا ہے۔ تاہم ، ایسی صورتوں میں جہاں چابیاں بہت بڑی ہیں اور براہ راست انڈیکس کے طور پر استعمال نہیں کی جاسکتی ہیں ، ہیکنگ نامی ایک تکنیک استعمال کی جاتی ہے۔

ہیشنگ میں ، بڑی چابیاں استعمال کرکے چھوٹی چابیاں میں تبدیل ہوجاتی ہیں ہیش افعال . اس کے بعد اقدار کو کسی ڈیٹا ڈھانچے میں محفوظ کیا جاتا ہےکرنے کے لئے ہیش ٹیبل ہیش ٹیبل ایک ڈیٹا ڈھانچہ ہے جو ایک لغت ADT کو نافذ کرتا ہے ، ایک ایسا ڈھانچہ جو اقدار کی منفرد چابیاں کا نقشہ بناسکے۔

عام طور پر ، ہیش ٹیبل میں دو بڑے اجزا ہوتے ہیں۔

  1. بالٹی صف: ہیش ٹیبل کے ل A بالٹی سرنی سائز N کی ایک سرنی A ہے ، جہاں A کے ہر خلیے کو 'بالٹی' سمجھا جاتا ہے ، یعنی کلیدی قدر کے جوڑے کا مجموعہ ہے۔ عددی N صف کی گنجائش کی وضاحت کرتا ہے۔
  2. ہیش فنکشن: یہ کوئی بھی فنکشن ہے جو ہمارے نقشے میں ہر کلیدی K کو نقشے [0، N & مائنس 1] میں ایک عدد سے جوڑتا ہے ، جہاں N اس ٹیبل کے لئے بالٹی صف کی گنجائش ہے۔

جب ہم اشیاء کو ہیش ٹیبل میں رکھتے ہیں تو ، یہ ممکن ہے کہ مختلف اشیاء میں ایک ہی ہیشکوڈ ہو۔ اسے a کہتے ہیں تصادم . تصادم سے نمٹنے کے لئے ، زنجیروں اور کھلی ایڈریسنگ جیسی تکنیک موجود ہیں۔

تو ، یہ جاوا میں کچھ بنیادی اور سب سے زیادہ استعمال شدہ ڈیٹا ڈھانچے ہیں۔ اب جب کہ آپ ان میں سے ہر ایک سے واقف ہیں ، آپ ان پر عمل درآمد شروع کرسکتے ہیں . اس کے ساتھ ، ہم نے ’اس‘ ڈیٹا سٹرکچر اور جاوا میں الگورتھم ’مضمون کا پہلا حصہ مکمل کرلیا ہے۔ اگلے حصے میں ، ہم اس کے بارے میں جاننے جا رہے ہیںبنیادی الگورتھم اور ان کو عملی ایپلی کیشنز میں کیسے استعمال کریں جیسے چھانٹنا اور تلاش کرنا ، تقسیم کرنا اور فتح کرنا ، لالچی الگورتھم ، متحرک پروگرامنگ۔

جاوا میں الگورتھم

پیچیدہ ریاضیاتی کمپیوٹوں کو حل کرنے کے لئے آلہ کار کے طور پر تاریخی طور پر استعمال کیا جاتا ہے ، الگورتھم کمپیوٹر سائنس کے ساتھ اور خاص طور پر ڈیٹا ڈھانچے کے ساتھ گہرا تعلق رکھتے ہیں۔ ایک الگورتھم ہے ہدایات کا ایک سلسلہ جو کسی خاص مسئلے کو ایک طویل مدت میں حل کرنے کا طریقہ بیان کرتا ہے۔ ان کی نمائندگی دو طریقوں سے کی گئی ہے۔

  • فلو چارٹس - یہ ایک ہےالگورتھم کے کنٹرول بہاؤ کی بصری نمائندگی
  • سیڈوکوڈ - یہایک الگورتھم کی عبارت نمائندگی ہے جو حتمی ماخذ کوڈ کے قریب ہے

نوٹ: الگورتھم کی کارکردگی وقت کی پیچیدگی اور خلائی پیچیدگی کی بنیاد پر ماپا جاتا ہے۔ زیادہ تر ، کسی بھی الگورتھم کی پیچیدگی کا انحصار مسئلے اور خود الگورتھم پر ہوتا ہے۔

آئیے جاوا میں الگورتھم کی دو بڑی اقسام کو تلاش کریں ، جو یہ ہیں:

جاوا میں الگورتھم کی ترتیب

ترتیب الگورتھم الگورتھم ہیں جو ایک فہرست کے عناصر کو ایک خاص ترتیب میں رکھتے ہیں۔ سب سے زیادہ عام طور پر استعمال ہونے والے احکامات عددی ترتیب اور لغتیات ترتیب ہیں۔ اس ‘ڈیٹا ڈھانچے اور الگورتھم’ مضمون میں کچھ ترتیب دینے والے الگورتھم کو تلاش کرنے دیتا ہے۔

جاوا میں بلبلا ترتیب دیں

بلبلا ترتیب ، جسے اکثر ڈوبنے والی ترتیب کے طور پر بھی جانا جاتا ہے ، الگ الگ الگھم چھانٹ رہا ہے۔ یہ فہرست میں بار بار ترتیب دیتا ہے تاکہ ترتیب دیا جائے ، ملحقہ عناصر کے ہر جوڑے کا موازنہ کیا جائے اور اگر وہ غلط ترتیب میں ہوں تو ان کو بدل دیتا ہے۔بلبلا ترتیب اس کا نام لیتا ہے کیونکہ یہ عناصر کو صف کے اوپر ، جیسے بلبلوں کو پانی پر تیرتے ہوئے فلٹر کرتا ہے۔

یہ ہےچھبل کوڈ جو بلبلا ترتیب الگورتھم کی نمائندگی کرتا ہے (اوپر چڑھتے ہوئے سیاق و سباق)۔

a [] سائز N کی شکل کا ایک آغاز ہے BubbleSort (a []) اعداد I ، j کے لئے i = 0 سے N - 1 کے لئے J = 0 سے N - i - 1 اگر ایک [j]> a [j + 1 ] پھر a [j] ، a [j + 1] اختتامی تبدیل کریں اگر اختتام کے لئے اختتام بلبلاورٹ

اس کوڈ میں N ڈیٹا آئٹمز کی ایک جہتی سرنی کو چڑھتے ہوئے آرڈر کا آرڈر دیا گیا ہے۔ بیرونی لوپ N-1 کو سرے سے گزرتا ہے۔ ہر پاس اعداد و شمار کی اشیا کا تبادلہ کرنے کے لئے اندرونی لوپ کا استعمال کرتا ہے تاکہ اگلی چھوٹی ڈیٹا آئٹم صف کے آغاز کی طرف 'بلبل'۔ لیکن مسئلہ یہ ہے کہ الگورتھم کو بغیر کسی تبادلہ کے ایک پورے پاس کی ضرورت ہے تاکہ یہ معلوم ہو سکے کہ فہرست ترتیب دی گئی ہے۔

بدترین اور اوسط کیس ٹائم پیچیدگی: O (n * n) سب سے خراب صورت اس وقت ہوتی ہے جب ایک صف کو الٹ ترتیب دیا جاتا ہے۔

بہترین کیس ٹائم کمپلیکسٹی: O (n) بہترین صورت اس وقت پیش آتی ہے جب صف کی ترتیب پہلے سے کردی جاتی ہے۔

جاوا میں سلیکشن ترتیب

انتخاب چھانٹنا ، تلاش اور چھانٹانا دونوں کا ایک مجموعہ ہے۔ الگورتھم بار بار غیر ترتیب شدہ حصے سے کم سے کم عنصر (صعودی ترتیب پر غور کرتے ہوئے) ڈھونڈ کر اور صف میں مناسب پوزیشن پر رکھ کر صف کو ترتیب دیتا ہے۔

یہاں سلیکوڈ سلیکشن ترتیب الگورتھم کی نمائندگی کرتا ہے (چڑھتے ہوئے ترتیب کی سیاق و سباق)۔

a [] I = 0 سے n - 1 / * کے لئے موجودہ عنصر کو کم سے کم مقرر کریں * / منٹ = i / * کم سے کم عنصر تلاش کریں * / j = i + 1 کے لئے N سائز سائز کی ایک صف ہے۔ to n اگر فہرست [j]

جیسا کہ آپ کوڈ سے سمجھ سکتے ہیں ، ترتیب میں کتنی بار سرے سے گزرتا ہے وہ صف میں موجود اشیاء کی تعداد سے کم ہے۔ اندرونی لوپ اگلی چھوٹی قیمت اور بیرونی لوپ کی جگہوں کو تلاش کرتا ہے جو اس کی مناسب جگہ پر قدر کرتی ہے۔ سلیکشن کی ترتیب کبھی بھی O (n) تبدیل کرنے سے زیادہ نہیں بناتی ہے اور جب کارآمد ہو تو میموری مفید ہوگا۔

وقت کی پیچیدگی: O (n)2) چونکہ وہاں دو گھونسلے والے لوپ ہیں۔

معاون جگہ: یا (1)

جاوا میں اندراج کی ترتیب

اندراج کی ترتیب ایک الگ الگ الگورتھم ہے جو ایک وقت میں ایک ان پٹ عنصر کھا کر فہرست میں دہراتا ہے اور حتمی ترتیب دینے والی صف کو تیار کرتا ہے۔ یہ چھوٹے اعداد و شمار کے سیٹوں پر بہت آسان اور زیادہ موثر ہے۔ یہ مستحکم اور جگہ میں چھنٹائی کی تکنیک ہے۔

یہاں چھپنے والا کوڈ ترتیب دیں الگورتھم کی نمائندگی کرتا ہے (چڑھتے ہوئے سیاق و سباق)۔

a [] I N1 سائز کی ایک صف ہے [i] 1 کے لئے N key = a [i] j = i - 1 جبکہ (j> = 0 اور a [j]> key0 a [j + 1] = x [j] j = j - 1 اختتام جبکہ ایک [j + 1] = اختتامی اندراج کے لئے کلیدی اختتام

جیسا کہ آپ کوڈ سے سمجھ سکتے ہیں ، اندراج کی ترتیب الگورتھمان پٹ ڈیٹا سے ایک عنصر کو ہٹاتا ہے ، وہ مقام ڈھونڈتا ہے جس کی ترتیب ترتیب میں ہے اور وہیں داخل کرتا ہے۔ یہ اس وقت تک دہراتا ہے جب تک کہ کوئی ان پٹ عناصر غیر ترتیب شدہ نہ رہیں۔

بہترین کیس: سب سے بہتر معاملہ یہ ہے کہ جب ان پٹ ایک صف ہے جو پہلے ہی ترتیب دی گئی ہے۔ اس معاملے میں اندراج کی ترتیب میں ایک لکیری رننگ ٹائم ہوتا ہے (یعنی ، اور تھیٹا (این))۔

بدترین صورت: سب سے آسان ترین صورت ان پٹ ریورس ترتیب میں ترتیب دی گئی ایک صف ہے۔

جاوا میں کوئیکسورٹ

کوئکسورٹ الگورتھم ایک تیز ، تکرار کرنے والا ، غیر مستحکم ترتیب والا الگورتھم ہے جو تقسیم اور فتح کے اصول کے تحت کام کرتا ہے۔ یہ محور کے بطور ایک عنصر چنتا ہے اور دیئے گئے سرے کے چاروں طرف محور کو بٹھا دیتا ہے۔

فوری ترتیب دینے کے لئے اقدامات:

  1. ایک موزوں 'محور نقطہ' چنیں۔
  2. فہرستوں کو دو فہرستوں میں تقسیم کریںاس محور عنصر پر مبنی ہر عنصر جو محور عنصر سے چھوٹا ہے اسے بائیں فہرست میں رکھا گیا ہے اور ہر عنصر جو بڑا ہے اسے دائیں فہرست میں رکھا گیا ہے۔ اگر عنصر محور عنصر کے برابر ہے تو وہ کسی بھی فہرست میں جاسکتا ہے۔ اسے پارٹیشن آپریشن کہتے ہیں۔
  3. چھوٹی چھوٹی فہرستوں میں سے ہر ایک کو بار بار ترتیب دیں۔

یہاں کوئسوسورٹ الگورتھم کی نمائندگی کرنے والا سیڈوکوڈ ہے۔

کوئیکسورٹ (A سرے کی طرح ، انٹ کے طور پر کم ، انٹ سے کم اونچی) {اگر (کم ہے

مندرجہ بالا سیڈوکوڈ میں ، تقسیم () تقریب تقسیم آپریشن انجام دیتا ہے اور کوئکسورٹ () فنکشن ہر بار تیار کی جانے والی چھوٹی فہرست کے لئے پارٹیشن فنکشن کو بار بار کال کرتا ہے۔ اوسطا معاملے میں کوئیکسورٹ کی پیچیدگی & تھیٹا (این لاگ (این)) ہے اور بدترین صورت میں & تھیٹا (این 2) ہے۔

جاوا میں ترتیب دیں ضم کریں

مرجسورٹ ایک تیز ، تکرار کرنے والا ، مستحکم ترتیب دینے والا الگورتھم ہے جو تقسیم اور فتح کے اصول کے ذریعہ بھی کام کرتا ہے۔ کوئکسورٹ کی طرح ، انضمام کی ترتیب عناصر کی فہرست کو دو فہرستوں میں تقسیم کرتی ہے۔ ان فہرستوں کو آزادانہ طور پر ترتیب دیا جاتا ہے اور پھر ان کو جوڑ دیا جاتا ہے۔ فہرستوں کے امتزاج کے دوران ، عناصر کو فہرست میں صحیح جگہ پر داخل کیا جاتا ہے (یا ضم کردیا جاتا ہے)۔

یہاں ضم شدہ ترتیب الگورتھم کی نمائندگی کرنے والا سیڈوکوڈ ہے۔

طریقہ کار MergeSort (a as a array) اگر (n == 1) ایک var l1 کو بطور سرنی = a [0] ... a [n / 2] var l2 کو بطور صف = a [n / 2 + 1] ... a [n] l1 = انضمام (l1) l2 = انضمام (l2) واپسی انضمام (l1 ، l2) اختتامی طریقہ کار کے طریقہ کار ضم (ایک سرنی کے طور پر ، بی سرنی کے طور پر) وی سی سرے کے طور پر جبکہ (ایک اور بی عناصر ہیں) a [0]> b [0]) c کو ختم کرنے کے آخر میں b [0] کو شامل کریں b [0] b سے b کے آخر میں a [0] شامل کریں اگر ختم ہونے تک ایک [0] کو اختتام سے ختم کریں (ایک عنصر ہیں) سی کے آخر میں ایک [0] شامل کریں جب ایک [0] کو اختتام سے ہٹا دیں جبکہ (بی عناصر ہوتے ہیں) بی کے اختتام پر بی [0] شامل کریں بی واپسی کے دوران بی [0] کو ختم کریں c آخر طریقہ کار

انضمام () تقریب فہرست کو دو ، کالوں میں تقسیم کرتی ہے انضمام () ان فہرستوں پر علیحدہ علیحدہ اور پھر انضمام کو پیرامیٹر کے بطور بھیج کر () فنکشن میں شامل کریں۔الگورتھم میں O (n لاگ (این)) کی پیچیدگی ہے اور اس میں بہت ساری ایپلی کیشنز ہیں۔

جاوا میں ڈھیر کی ترتیب

ہیپاسورٹ موازنہ پر مبنی چھانٹ رہا الگورتھم ہےثنائی کے ڈھیر کے اعداد و شمار کا ڈھانچہ. آپ اس کے بارے میں بہتر ورژن f سلیکشن کی طرح سوچ سکتے ہیں ، جہاںیہ اپنے ان پٹ کو چھانٹے ہوئے اور غیر منقسم خطے میں تقسیم کرتا ہے ، اور یہ تکرار کے ساتھ سب سے بڑے عنصر کو نکال کر اور ترتیب والے خطے میں منتقل کرکے غیر ترتیب شدہ خطے کو گھٹا دیتا ہے۔

کوئکسورٹ کو نافذ کرنے کے اقدامات (بڑھتے ہوئے ترتیب میں):

  1. چھانٹ رہے سرنی کے ساتھ زیادہ سے زیادہ ڈھیر بنائیں
  2. اس نقطہ پرt ، سب سے بڑی چیز ڈھیر کی جڑ میں ذخیرہ ہوتی ہے۔ اسے ڈھیر کی آخری چیز سے تبدیل کریں اور ڈھیر کے سائز کو 1 سے کم کریں۔ آخر میں ، درخت کی جڑ کو ہیپٹیفائی کریں
  3. مندرجہ بالا مراحل دہرائیں جب تک کہ ڈھیر کا سائز 1 سے زیادہ نہ ہو

یہ ہیڈ ترتیب سے الگورتھم کی نمائندگی کرنے والا سیڈوکوڈ ہے۔

i = n-1 سے 0 تبادلہ (a [0]، a [i]) ہیپی اسٹورٹ (a as a array) (i = n / 2 - 1) سے i> = 0 heapify (a، n، i) (a، i، 0) heapify کے اختتام کے لئے اختتام (a as aray، n as int، i as int) سب سے بڑا = i // سب سے بڑا جڑ کے طور پر شروع کریں l eft = 2 * i + 1 // بائیں = 2 * i + 1 انٹ رائٹ = 2 * میں + 2 // رائٹ = 2 * میں + 2 اگر (بائیں ایک [سب سے بڑا]) سب سے بڑا = بائیں اگر (دائیں ایک [سب سے بڑا]) سب سے بڑا = دائیں اگر (سب سے بڑا! = میں) تبادلہ ( a [i]، A [سب سے بڑا]) Heapify (a، n، বৃহত্তম) اختتامی heapify

ان کے علاوہ ، چھانٹ کرنے والے دوسرے الگورتھم بھی ہیں جو اتنے مشہور نہیں ہیں جیسے ، انٹروسورٹ ، گنتی ترتیب ، وغیرہ اس ‘ڈیٹا سٹرکچر اور الگورتھم’ مضمون میں الگورتھم کے اگلے سیٹ میں آگے بڑھ رہے ہیں ، آئیے تلاش کرنے والے الگورتھم کی کھوج کرتے ہیں۔

جاوا میں الگورتھم تلاش کرنا

باقاعدہ کاروباری درخواستوں میں تلاشی ایک سب سے عام اور کثرت سے انجام دی گئی کارروائی ہے۔ آئٹمز کے ذخیرے میں مخصوص خصوصیات والی کوئی شے ڈھونڈنے کے لئے سرچ الگورتھم الگورتھم ہیں۔ آئیے تلاش کرنے کے لئے سب سے زیادہ استعمال ہونے والی دو الگورتھم تلاش کرتے ہیں۔

جاوا میں لکیری تلاش الگورتھم

خطوطی تلاش یا ترتیب وار تلاش ہی آسان ترین الگورتھم ہے۔ اس میں دیئے گئے ڈیٹا ڈھانچے میں کسی عنصر کی ترتیب وار تلاش شامل ہے جب تک کہ عنصر نہ ملے یا ساخت کا اختتام نہ ہو۔ اگر عنصر مل جاتا ہے ، تو اس شے کا مقام واپس ہوجاتا ہے بصورت دیگر الگورتھم NULL لوٹاتا ہے۔

جاوا میں لکیری تلاش کی نمائندگی کرنے والا یہ سیڈوکوڈ ہے۔

طریقہ کار لکیری_سرچ (ایک [] ، قدر) i = 0 سے این -1 کے لئے اگر ایک [i] = قدر ہے تو پرنٹ کریں 'ملا' واپسی میں ختم ہوگا اگر پرنٹ 'نہیں ملا' آخر لائنر_سرچ کے لئے ختم

یہ ایک ہےجانور طاقت الگورتھماگرچہ یہ یقینی طور پر آسان ترین ہے ، لیکن اس کی عدم اہلیت کی وجہ سے ، یہ سب سے زیادہ عام طور پر سب سے عام نہیں ہے۔ لائنر سرچ کی ٹائم کمپلیکسٹی ہے O (N) .

جاوا میں ثنائی کی تلاش الگورتھم

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

جاوا میں ثنائی تلاش کی نمائندگی کرنے والا یہ سیڈوکوڈ ہے۔

طریقہ کار بائنری_سرچ ایک ترتیب شدہ سرنی ن سائز کے سرنی x قدر کی تلاش کی جائے تو کم باؤنڈ = 1 اوپرباؤنڈ = n جبکہ ایکس نہیں ملا تو اپر باؤنڈ

جب اوپری باؤنڈ (ہمارا اشارہ) نچلے باؤنڈ (آخری عنصر) سے گذر جاتا ہے تو تلاش ختم ہوجاتی ہے ، جس سے ظاہر ہوتا ہے کہ ہم نے پوری صف کو تلاش کیا ہے اور عنصر موجود نہیں ہے۔یہ سب سے زیادہ عام طور پر استعمال شدہ الگورتھم استعمال کیا جاتا ہے جس کی بنیادی وجہ اس کے فوری تلاش کے وقت کی وجہ سے ہے۔ بائنری تلاش میں وقت کی پیچیدگی ہے O (N) جو کہ پر نمایاں بہتری ہے O (N) خطی تلاش کی وقت پیچیدگی۔

یہ ہمارے اس 'ڈیٹا سٹرکچر اور جاوا میں الگورتھم' مضمون کے اختتام تک پہنچا ہے۔ میں نے جاوا کے ایک بنیادی اور اہم موضوع کا احاطہ کیا ہے۔امید ہے کہ آپ اس مضمون میں جو کچھ آپ کے ساتھ شیئر کیا گیا ہے اس کے ساتھ آپ صاف ہیں۔

یقینی بنائیں کہ آپ زیادہ سے زیادہ مشق کریں اور اپنے تجربے کو پلٹائیں۔

چیک کریں ایڈوریکا کے ذریعہ ، ایک قابل اعتماد آن لائن سیکھنے والی کمپنی جس کی دنیا بھر میں 250،000 سے زیادہ مطمئن سیکھنے والوں کا نیٹ ورک موجود ہے۔ ہم آپ کے سفر کے ہر قدم میں آپ کی مدد کرنے کے لئے یہاں موجود ہیں ، اس جاوا انٹرویو سوالات کے علاوہ بننے کے ل a ، ہم ایک نصاب تیار کرتے ہیں جو طلباء اور پیشہ ور افراد کے لئے تیار کیا گیا ہے جو جاوا ڈویلپر بننا چاہتے ہیں۔

ہمارے لئے ایک سوال ہے؟ برائے کرم اس کا ذکر 'جاوا میں ڈیٹا سٹرکچر اور الگورتھم' کے تبصرے سیکشن میں کریں۔ مضمون اور ہم جلد از جلد آپ کے پاس واپس آئیں گے۔