Halo! Kuliah hari ini akan sedikit berbeda dari kuliah lainnya. Bedanya, ini hanya terkait secara tidak langsung dengan Java. Namun topik ini sangat penting bagi setiap programmer. Kami akan berbicara tentang algoritma . Apa itu algoritma? Secara sederhana, ini adalah serangkaian tindakan tertentu yang harus dilakukan untuk mencapai hasil yang diinginkan . Kita sering menggunakan algoritma dalam kehidupan sehari-hari. Misalnya, setiap pagi Anda dihadapkan pada tugas: datang ke sekolah atau bekerja, sekaligus menjadi:
- Berpakaian
- Membersihkan
- Cukup makan
- Bangun karena jam alarm.
- Mandi, cuci muka.
- Menyiapkan sarapan, membuat kopi/teh.
- Makan.
- Jika Anda belum menyetrika pakaian sejak malam hari, setrikalah.
- Berpakaian.
- Meninggalkan rumah.
- Beli atau unduh di Internet “Kamus Nama Pribadi Rusia” edisi 1966.
- Temukan setiap nama di daftar kami di kamus ini.
- Tuliskan di selembar kertas di halaman kamus mana nama tersebut berada.
- Susunlah nama-nama tersebut secara berurutan menggunakan catatan di selembar kertas.
for
yang melakukan tugas ini
int[] numbers = new int[100];
// ..заполняем массив числами
for (int i: numbers) {
System.out.println(i);
}
Apa kompleksitas dari algoritma tertulis? Linier, PADA(N). Jumlah tindakan yang harus dilakukan program bergantung pada berapa banyak angka yang dimasukkan ke dalamnya. Jika ada 100 angka dalam array, akan ada 100 tindakan (output di layar). Jika ada 10.000 angka dalam array, 10.000 tindakan perlu dilakukan. Bisakah algoritme kami ditingkatkan? TIDAK. Bagaimanapun, kita harus membuat N melewati array dan melakukan N keluaran ke konsol. Mari kita lihat contoh lainnya.
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 yang kosong LinkedList
di mana kami memasukkan beberapa nomor. Kita perlu memperkirakan kompleksitas algoritma untuk memasukkan satu nomor ke dalam LinkedList
contoh kita, dan bagaimana hal itu bergantung pada jumlah elemen dalam daftar. Jawabannya adalah O(1) - kompleksitas konstan . Mengapa? Harap diperhatikan: setiap kali kami memasukkan nomor di awal daftar. Selain itu, seperti yang Anda ingat, saat memasukkan angka ke dalam LinkedList
elemen, angka tersebut tidak digeser ke mana pun - tautan didefinisikan ulang (jika Anda tiba-tiba lupa cara kerja LinkedList, lihat salah satu kuliah lama kami ). Jika sekarang angka pertama dalam daftar kita adalah angka х
, dan kita memasukkan angka y di awal daftar, yang diperlukan hanyalah:
x.previous = y;
y.previous = null;
y.next = x;
Untuk redefinisi referensi ini, tidak menjadi masalah bagi kita berapa banyak angka yang ada sekarangLinkedList
- setidaknya satu, setidaknya satu miliar. Kompleksitas algoritma akan konstan - O(1).
GO TO FULL VERSION