بگ-او نوٹیشن کیا ہے؟

بگ-او نوٹیشن کیا ہے؟

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





بگ-او نوٹیشن کیا ہے؟

بگ-او نوٹیشن آپ کو یہ بتانے کا ایک طریقہ فراہم کرتا ہے کہ آپ کے کوڈ کو چلانے میں کتنا وقت لگے گا۔ آپ جسمانی طور پر وقت دے سکتے ہیں کہ آپ کے کوڈ کو چلنے میں کتنا وقت لگتا ہے ، لیکن اس طریقہ کار کے ساتھ ، چھوٹے وقت کے فرق کو پکڑنا مشکل ہے۔ مثال کے طور پر ، کوڈ کی 20 اور 50 لائنوں کو چلانے میں جو وقت لگتا ہے وہ بہت کم ہے۔ تاہم ، ایک بڑے پروگرام میں ، وہ ناکارہیاں شامل ہو سکتی ہیں۔





سم کارڈ کا بندوبست نہیں ملی میٹر#2۔

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





آپ بگ-او نوٹیشن کا حساب کیسے لگاتے ہیں؟

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

الگورتھم 1:



def sockCounter(numberOfPairs):
individualSocks = 0
for x in range(numberOfPairs):
individualSocks = individualSocks + 2
return individualSocks

الگورتھم 2:

def sockCounter(numberOfPairs):
return numberOfPairs * 2

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





متعلقہ: پروگرامنگ میں ایک فنکشن کیا ہے؟

الگورتھم 1 کے کئی مراحل ہیں:





  1. یہ متغیر انفرادی ساکس کو صفر کی قیمت تفویض کرتا ہے۔
  2. یہ متغیر i کو ایک کی قیمت تفویض کرتا ہے۔
  3. اس کا موازنہ نمبر اوف پیئرز سے ہے۔
  4. یہ انفرادی ساکس میں دو کا اضافہ کرتا ہے۔
  5. یہ انفرادی ساکس کی بڑھتی ہوئی قیمت خود کو تفویض کرتا ہے۔
  6. یہ ایک ایک کرکے بڑھاتا ہے۔
  7. یہ پھر 3 سے 6 مراحل سے گزرتا ہے جتنی بار (indiviualSocks - 1)۔

الگورتھم کے لیے ہمیں جن مراحل کو مکمل کرنا ہے ان کا اظہار اس طرح کیا جا سکتا ہے:

4n + 2

چار مراحل ہیں جو ہمیں ن اوقات میں مکمل کرنے ہیں۔ اس صورت میں ، n numberOfPairs کی قدر کے برابر ہوگا۔ 2 مرحلے بھی ہیں جو ایک بار مکمل ہوتے ہیں۔

مقابلے میں ، الگورتھم 2 میں صرف ایک قدم ہے۔ numberOfPairs کی قدر دو سے ضرب ہے۔ ہم اس کا اظہار اس طرح کریں گے:

1

اگر یہ پہلے سے ظاہر نہیں تھا ، اب ہم آسانی سے دیکھ سکتے ہیں کہ الگورتھم 2 تھوڑا سا زیادہ موثر ہے۔

بگ-او تجزیہ۔

عام طور پر ، جب آپ ایک الگورتھم کے Big-O اشارے میں دلچسپی رکھتے ہیں ، تو آپ مجموعی کارکردگی میں زیادہ دلچسپی لیتے ہیں اور اس طرح اقدامات کی تعداد کے باریک اناج کے تجزیے میں۔ اشارے کو آسان بنانے کے لیے ، ہم صرف کارکردگی کی وسعت بیان کر سکتے ہیں۔

مندرجہ بالا مثالوں میں ، الگورتھم 2 کا اظہار ایک کے طور پر کیا جائے گا:

O(1)

لیکن الگورتھم 1 کو آسان بنایا جائے گا:

O(n)

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

لکیری کوڈ

تصویری کریڈٹ: نک فلیڈرس/ اسم پراجیکٹ۔

چونکہ ہم n کی قدر نہیں جانتے ، اس لیے یہ سوچنا زیادہ مددگار ہے کہ n کی قدر اس کوڈ کی مقدار کو کیسے متاثر کرتی ہے جس کو چلانے کی ضرورت ہے۔ الگورتھم 1 میں ہم کہہ سکتے ہیں کہ رشتہ لکیری ہے۔ اگر آپ اقدامات کی تعداد بمقابلہ n کی قیمت بناتے ہیں تو آپ کو ایک سیدھی لکیر مل جاتی ہے جو اوپر جاتی ہے۔

چوکور ضابطہ۔

تمام رشتے لکیری مثال کی طرح آسان نہیں ہوتے۔ تصور کریں کہ آپ کے پاس 2D صف ہے اور آپ صف میں کوئی قدر تلاش کرنا چاہیں گے۔ آپ اس طرح الگورتھم بنا سکتے ہیں:

def searchForValue(targetValue, arraySearched):
foundTarget = False
for x in arraySearched:
for y in x:
if(y == targetValue):
foundTarget = True
return foundTarget

اس مثال میں ، اقدامات کی تعداد arraySearched میں صفوں کی تعداد اور ہر صف میں اقدار کی تعداد پر منحصر ہے۔ تو ، اقدامات کی آسان تعداد n * n یا n² ہوگی۔

مفت میں میوزک ڈاؤن لوڈ کرنے کا طریقہ۔

تصویری کریڈٹ: نک فلیڈرس/ اسم پراجیکٹ۔

یہ رشتہ ایک چوکور تعلق ہے ، جس کا مطلب ہے کہ ہمارے الگورتھم میں اقدامات کی تعداد تیزی سے بڑھتی ہے n کے ساتھ۔ Big-O اشارہ میں ، آپ اسے اس طرح لکھیں گے:

O(n²)

متعلقہ: سی ایس ایس فائلوں کو چیک کرنے ، صاف کرنے اور بہتر بنانے کے لیے مفید ٹولز۔

لوگرتھمک کوڈ

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

log 2 (8) = 3

لاگ تین کے برابر ہے کیونکہ اگر ہماری بنیاد 2 تھی تو ہمیں 8 کی تعداد حاصل کرنے کے لیے 3 کی ایکسپونٹی ویلیو درکار ہوگی۔

تصویری کریڈٹ: نک فلیڈرس/ اسم پراجیکٹ۔

لہذا ، ایک لوگرتھمک فنکشن کا رشتہ ایک فوری تعلقات کے برعکس ہے۔ جیسا کہ n بڑھتا ہے ، الگورتھم کو چلانے کے لیے کم نئے اقدامات کی ضرورت ہوتی ہے۔

پہلی نظر میں ، یہ جوابی بدیہی لگتا ہے۔ الگورتھم کے قدم n سے سست کیسے بڑھ سکتے ہیں؟ اس کی ایک اچھی مثال ثنائی تلاش ہے۔ آئیے ایک الگورتھم پر غور کریں کہ منفرد اقدار کی ایک صف میں نمبر تلاش کریں۔

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

جیسا کہ آپ دیکھ سکتے ہیں ، چونکہ بائنری تلاشیں ہر پاس سے آدھی ممکنہ اقدار کو ختم کرتی ہیں ، جیسا کہ n بڑا ہوتا جاتا ہے ، ہم جتنی بار صف کو چیک کرتے ہیں اس کا اثر بمشکل متاثر ہوتا ہے۔ Big-O اشارہ میں اس کا اظہار کرنے کے لیے ، ہم لکھیں گے:

O(log(n))

بگ-او نوٹیشن کی اہمیت۔

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

اپنا فون نمبر کیسے چیک کریں

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

بانٹیں بانٹیں ٹویٹ ای میل۔ 10 سب سے عام پروگرامنگ اور کوڈنگ کی غلطیاں

کوڈنگ کی غلطیاں بہت ساری پریشانیوں کا باعث بن سکتی ہیں۔ یہ تجاویز آپ کو پروگرامنگ کی غلطیوں سے بچنے اور اپنے کوڈ کو معنی خیز رکھنے میں مدد دیں گی۔

اگلا پڑھیں۔
متعلقہ موضوعات۔
  • پروگرامنگ۔
  • پروگرامنگ۔
مصنف کے بارے میں جینیفر سیٹن۔(21 مضامین شائع ہوئے)

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

جینیفر سیٹن سے مزید

ہماری نیوز لیٹر کو سبسکرائب کریں

ٹیک ٹپس ، جائزے ، مفت ای بکس ، اور خصوصی سودوں کے لیے ہمارے نیوز لیٹر میں شامل ہوں!

سبسکرائب کرنے کے لیے یہاں کلک کریں۔