MERHABA! Bugünün dersi diğerlerinden biraz farklı olacak. Java ile yalnızca dolaylı olarak ilişkili olması bakımından farklılık gösterecektir. Bununla birlikte, bu konu her programcı için çok önemlidir. Algoritmalar hakkında konuşacağız . Algoritma nedir? Basit bir ifadeyle, istenen bir sonuca ulaşmak için tamamlanması gereken bir dizi eylemdir . Algoritmaları günlük hayatta sıklıkla kullanırız. Örneğin, her sabah belirli bir göreviniz var: okula veya işe gidin ve aynı zamanda:
- giyinik
- Temiz
- Besledi
- Çalar saat kullanarak uyanın.
- Duş al ve kendini yıka.
- Kahvaltı ve biraz kahve veya çay yapın.
- Yemek yemek.
- Giysilerinizi bir önceki akşam ütülemediyseniz, ütüleyin.
- Giyinmek.
- Evi terk et.
- Webster's Third New International Dictionary'nin 1961 baskısını satın alın veya indirin.
- Listemizdeki her adı bu sözlükte bulun.
- Bir kağıda, adın bulunduğu sözlüğün sayfasını yazın.
- Adları sıralamak için kağıt parçalarını kullanın.
for
Bu görevi yerine getiren sıradan bir döngü yazarsınız.
int[] numbers = new int[100];
// ...fill the array with numbers
for (int i: numbers) {
System.out.println(i);
}
Bu algoritmanın karmaşıklığı nedir? Doğrusal, yani O(n). Programın gerçekleştirmesi gereken eylem sayısı, kendisine kaç sayı iletildiğine bağlıdır. Dizide 100 sayı varsa, 100 eylem olacaktır (ekranda dizeleri görüntülemek için ifadeler). Dizide 10.000 sayı varsa, 10.000 eylem gerçekleştirilmelidir. Algoritmamız herhangi bir şekilde geliştirilebilir mi? Hayır. Ne olursa olsun, diziden N tane geçiş yapmamız ve dizileri konsolda görüntülemek için N ifadeleri çalıştırmamız gerekecek . Başka bir örnek düşü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
İçine birkaç sayı eklediğimiz bir boşluğumuz var . LinkedList
Örneğimize tek bir sayı eklemenin algoritmik karmaşıklığını ve bunun listedeki öğe sayısına nasıl bağlı olduğunu değerlendirmemiz gerekiyor . Cevap O(1), yani sabit karmaşıklıktır . Neden? Her sayıyı listenin başına eklediğimize dikkat edin. LinkedList
Ek olarak, a'ya bir sayı eklediğinizde öğelerin hiçbir yere taşınmadığını hatırlayacaksınız . Bağlantılar (veya referanslar) güncellenir (LinkedList'in nasıl çalıştığını unuttuysanız, eski derslerimizden birine bakın ). Listemizdeki ilk sayı ise x
ve y sayısını listenin başına yerleştirirsek, o zaman tek yapmamız gereken şudur:
x.previous = y;
y.previous = null;
y.next = x;
Bağlantıları güncellediğimizde, ister bir ister bir milyar olsun, içinde zaten kaç sayı olduğu umurumuzda değilLinkedList
. Algoritmanın karmaşıklığı sabittir, yani O(1).
GO TO FULL VERSION