Hai! Pelajaran hari ini akan sedikit berbeda dari yang lain. Ini akan berbeda karena hanya terkait secara tidak langsung dengan Jawa. Konon, topik ini sangat penting bagi setiap programmer. Kita akan berbicara tentang algoritma . Apa itu algoritma? Secara sederhana, itu adalah beberapa urutan tindakan yang harus diselesaikan untuk mencapai hasil yang diinginkan . Kami sering menggunakan algoritma dalam kehidupan sehari-hari. Misalnya, setiap pagi Anda memiliki tugas tertentu: pergi ke sekolah atau bekerja, dan pada saat yang sama menjadi:
- Berpakaian
- Membersihkan
- Diberi makan
- Bangun menggunakan jam alarm.
- Mandi dan bersihkan dirimu.
- Buat sarapan dan kopi atau teh.
- Makan.
- Jika Anda tidak menyetrika pakaian Anda pada malam sebelumnya, maka setrikalah.
- Berpakaian.
- Meninggalkan rumah.
- Beli atau unduh Kamus Internasional Baru Ketiga Webster edisi 1961.
- Temukan setiap nama dari daftar kami di kamus ini.
- Di selembar kertas, tulis halaman kamus tempat nama itu berada.
- Gunakan potongan kertas untuk mengurutkan nama.
for
yang melakukan tugas ini
int[] numbers = new int[100];
// ...fill the array with numbers
for (int i: numbers) {
System.out.println(i);
}
Apa kompleksitas dari algoritma ini? Linear, yaitu O(n). Jumlah tindakan yang harus dilakukan program bergantung pada berapa banyak angka yang diteruskan ke program tersebut. Jika ada 100 angka dalam larik, akan ada 100 tindakan (pernyataan untuk menampilkan string di layar). Jika ada 10.000 angka dalam larik, maka 10.000 tindakan harus dilakukan. Bisakah algoritme kami ditingkatkan dengan cara apa pun? Tidak. Apa pun yang terjadi, kita harus membuat N melewati array dan menjalankan pernyataan N untuk menampilkan string di 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 memiliki ruang kosong LinkedList
tempat kami memasukkan beberapa angka. Kita perlu mengevaluasi kompleksitas algoritmik dalam memasukkan satu angka ke dalam LinkedList
contoh kita, dan bagaimana hal itu bergantung pada jumlah elemen dalam daftar. Jawabannya adalah O(1), yaitu kompleksitas konstan . Mengapa? Perhatikan bahwa kami memasukkan setiap nomor di awal daftar. Selain itu, Anda akan mengingat bahwa saat Anda memasukkan angka ke dalam a LinkedList
, elemen tidak berpindah ke mana pun. Tautan (atau referensi) diperbarui (jika Anda lupa cara kerja LinkedList, lihat salah satu pelajaran lama kami ). Jika angka pertama dalam daftar kita adalah x
, dan kita menyisipkan angka y di depan daftar, maka yang perlu kita lakukan hanyalah ini:
x.previous = y;
y.previous = null;
y.next = x;
Saat kami memperbarui tautan, kami tidak peduli berapa angka yang sudah ada diLinkedList
, apakah satu atau satu miliar. Kompleksitas algoritma adalah konstan, yaitu O(1).
GO TO FULL VERSION