سلام اڄ جو سبق باقي سبق کان ٿورو مختلف هوندو. ان ۾ فرق هوندو ته اهو صرف اڻ سڌي طرح جاوا سان لاڳاپيل آهي. اهو چيو ته، هي موضوع هر پروگرامر لاء تمام ضروري آهي. اسان algorithms بابت ڳالهائڻ وارا آهيون . هڪ الگورتھم ڇا آهي؟ سادي اصطلاحن ۾، اهو عملن جو ڪجهه سلسلو آهي جيڪو گهربل نتيجو حاصل ڪرڻ لاء مڪمل ٿيڻ گهرجي . اسان اڪثر روزمره جي زندگي ۾ الگورتھم استعمال ڪندا آهيون. مثال طور، هر صبح توهان وٽ هڪ خاص ڪم آهي: اسڪول يا ڪم تي وڃو، ۽ ساڳئي وقت:
- ڪپڙو
- صاف
- فيڊ
- الارم ڪلاڪ استعمال ڪندي جاڳڻ.
- شاور وٺو ۽ پاڻ کي ڌوء.
- ناشتو ۽ ڪافي يا چانهه ٺاهيو.
- کائو.
- جيڪڏهن توهان اڳئين شام پنهنجا ڪپڙا استري نه ڪيا هئا، ته پوءِ ان کي استري ڪريو.
- ڪپڙا پايو.
- گهر ڇڏي وڃ.
- خريد ڪريو يا ڊائونلوڊ ڪريو 1961 جو ايڊيشن Webster's Third New International Dictionary.
- هن ڊڪشنري ۾ اسان جي لسٽ مان هر نالو ڳوليو.
- ڪاغذ جي هڪ ٽڪري تي، لغت جو صفحو لکو جنهن تي نالو موجود آهي.
- نالن کي ترتيب ڏيڻ لاءِ ڪاغذ جا ٽڪرا استعمال ڪريو.
for
لوپ جيڪو ھن ڪم کي انجام ڏئي ٿو
int[] numbers = new int[100];
// ...fill the array with numbers
for (int i: numbers) {
System.out.println(i);
}
هن الگورتھم جي پيچيدگي ڇا آهي؟ لڪير، يعني O(n). عملن جو تعداد جيڪو پروگرام کي انجام ڏيڻ لازمي آھي ان تي منحصر آھي ته ان کي ڪيترا نمبر گذري ويا آھن. جيڪڏهن صف ۾ 100 انگ آهن، اتي 100 ڪارناما هوندا (اسڪرين تي اسٽرنگ ڏيکارڻ لاءِ بيان). جيڪڏهن صف ۾ 10,000 انگ آهن، پوء 10,000 عملن کي انجام ڏيڻ گهرجي. ڇا اسان جي الگورتھم کي ڪنهن به طريقي سان بهتر بڻائي سگهجي ٿو؟ نه. ڪا به ڳالهه ناهي، اسان کي سر مان N پاس ڪرڻو پوندو ۽ ڪنسول تي اسٽرنگ ڏيکارڻ لاءِ N بيانن تي عمل ڪرڻو پوندو. هڪ ٻئي مثال تي غور ڪريو.
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
اسان وٽ ھڪڙو خالي آھي LinkedList
جنھن ۾ اسين ڪيترائي نمبر داخل ڪندا آھيون. اسان کي اسان جي مثال ۾ هڪ واحد نمبر داخل ڪرڻ جي الگورتھمڪ پيچيدگي جو جائزو وٺڻ جي ضرورت آهي LinkedList
، ۽ اهو ڪيئن منحصر آهي لسٽ ۾ عناصر جي تعداد تي. جواب آهي O(1) يعني مسلسل پيچيدگي . ڇو؟ نوٽ ڪريو ته اسان لسٽ جي شروعات ۾ هر نمبر داخل ڪندا آهيون. ان کان علاوه، توهان کي ياد هوندو ته جڏهن توهان هڪ نمبر ۾ داخل ڪريو ٿا LinkedList
، عناصر ڪٿي به نه ٿا وڃن. لنڪس (يا حوالا) اپڊيٽ ٿيل آهن (جيڪڏهن توهان وساريو ته LinkedList ڪيئن ڪم ڪري ٿي، اسان جي پراڻي سبقن
مان هڪ کي ڏسو ). جيڪڏهن اسان جي لسٽ ۾ پهريون نمبر آهي x
، ۽ اسان لسٽ جي سامهون نمبر y داخل ڪندا آهيون، پوء اسان کي اهو ڪرڻ جي ضرورت آهي:
x.previous = y;
y.previous = null;
y.next = x;
جڏهن اسان لنڪس کي اپڊيٽ ڪندا آهيون، اسان کي پرواه ناهي ته ڪيترا نمبر اڳ ۾ ئي آهنLinkedList
، ڇا هڪ يا هڪ ارب. الورورٿم جي پيچيدگي مسلسل آهي، يعني O(1).
GO TO FULL VERSION