Hai! Pelajaran hari ini akan berbeza sedikit daripada yang lain. Ia akan berbeza kerana ia hanya berkaitan secara tidak langsung dengan Java. Yang berkata, topik ini sangat penting untuk setiap pengaturcara. Kita akan bercakap tentang algoritma . Apakah algoritma? Secara ringkas, ini adalah beberapa urutan tindakan yang mesti diselesaikan untuk mencapai hasil yang diinginkan . Kami sering menggunakan algoritma dalam kehidupan seharian. Sebagai contoh, setiap pagi anda mempunyai tugas tertentu: pergi ke sekolah atau kerja, dan pada masa yang sama:
- Berpakaian
- Bersih
- makan
- Bangun tidur menggunakan jam penggera.
- Mandi dan basuh diri.
- Sediakan sarapan pagi dan kopi atau teh.
- makan.
- Jika anda tidak menyeterika pakaian anda pada petang sebelumnya, maka seterikanya.
- Berpakaian.
- Tinggalkan rumah.
- Beli atau muat turun Kamus Antarabangsa Baharu Webster edisi 1961.
- Cari setiap nama daripada senarai kami dalam kamus ini.
- Pada sehelai kertas, tulis halaman kamus di mana nama itu terletak.
- Gunakan kepingan kertas untuk mengisih nama.
for
yang melaksanakan tugas ini
int[] numbers = new int[100];
// ...fill the array with numbers
for (int i: numbers) {
System.out.println(i);
}
Apakah kerumitan algoritma ini? Linear, iaitu O(n). Bilangan tindakan yang mesti dilakukan oleh program bergantung pada bilangan nombor yang dihantar kepadanya. Jika terdapat 100 nombor dalam tatasusunan, akan ada 100 tindakan (pernyataan untuk memaparkan rentetan pada skrin). Jika terdapat 10,000 nombor dalam tatasusunan, maka 10,000 tindakan mesti dilakukan. Bolehkah algoritma kami dipertingkatkan dalam apa jua cara? Tidak. Tidak kira apa, kita perlu membuat N melalui tatasusunan dan melaksanakan penyataan N untuk memaparkan rentetan pada konsol. Pertimbangkan contoh lain.
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
Kami mempunyai kosong LinkedList
di mana kami memasukkan beberapa nombor. Kita perlu menilai kerumitan algoritma untuk memasukkan nombor tunggal ke dalam LinkedList
contoh kita, dan bagaimana ia bergantung pada bilangan elemen dalam senarai. Jawapannya ialah O(1), iaitu kerumitan malar . kenapa? Ambil perhatian bahawa kami memasukkan setiap nombor pada permulaan senarai. Di samping itu, anda akan ingat bahawa apabila anda memasukkan nombor ke dalam LinkedList
, unsur-unsur tidak bergerak ke mana-mana. Pautan (atau rujukan) dikemas kini (jika anda terlupa cara LinkedList berfungsi, lihat salah satu pelajaran lama kami ). Jika nombor pertama dalam senarai kami ialah x
, dan kami memasukkan nombor y di hadapan senarai, maka apa yang perlu kami lakukan ialah ini:
x.previous = y;
y.previous = null;
y.next = x;
Apabila kami mengemas kini pautan, kami tidak kisah berapa banyak nombor yang sudah ada dalamLinkedList
, sama ada satu atau satu bilion. Kerumitan algoritma adalah malar, iaitu O(1).
GO TO FULL VERSION