hello! Kuliah hari ini akan berbeza sedikit daripada yang lain. Ia akan berbeza kerana ia hanya berkaitan secara tidak langsung dengan Java. Walau bagaimanapun, topik ini sangat penting untuk setiap pengaturcara. Kita akan bercakap tentang algoritma . Apakah algoritma? Secara ringkas, ini ialah urutan tindakan tertentu yang mesti dilakukan untuk mencapai hasil yang diinginkan . Kami sering menggunakan algoritma dalam kehidupan seharian. Sebagai contoh, setiap pagi anda dihadapkan dengan tugas: datang ke sekolah atau bekerja, dan pada masa yang sama:
- Berpakaian
- Bersih
- cukup makan
- Bangun dengan jam penggera.
- Mandi, cuci muka.
- Sediakan sarapan pagi, buat kopi/teh.
- makan.
- Jika anda belum menyeterika pakaian anda sejak petang, gosokkannya.
- Berpakaian.
- Tinggalkan rumah.
- Beli atau muat turun di Internet "Kamus Nama Peribadi Rusia" edisi 1966.
- Cari setiap nama dalam senarai kami dalam kamus ini.
- Tulis pada sehelai kertas di mana halaman kamus nama itu.
- Susun nama mengikut urutan menggunakan nota pada sekeping kertas.
for
yang melaksanakan tugas ini
int[] numbers = new int[100];
// ..заполняем массив числами
for (int i: numbers) {
System.out.println(i);
}
Apakah kerumitan algoritma bertulis? Linear, O(N). Bilangan tindakan yang mesti dilakukan oleh program bergantung pada jumlah nombor yang dihantar ke dalamnya. Jika terdapat 100 nombor dalam tatasusunan, akan ada 100 tindakan (output pada skrin). Jika terdapat 10,000 nombor dalam tatasusunan, 10,000 tindakan perlu dilakukan. Bolehkah algoritma kami dipertingkatkan? Tidak. Walau apa pun, kita perlu membuat N melalui tatasusunan dan melaksanakan N output ke konsol. Mari kita lihat 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 satu yang kosong LinkedList
di mana kami memasukkan beberapa nombor. Kami perlu menganggarkan kerumitan algoritma untuk memasukkan nombor tunggal ke dalam LinkedList
contoh kami, dan bagaimana ia bergantung pada bilangan elemen dalam senarai. Jawapannya ialah O(1) - kerumitan malar . kenapa? Sila ambil perhatian: setiap kali kami memasukkan nombor pada permulaan senarai. Di samping itu, seperti yang anda ingat, apabila memasukkan nombor ke dalam LinkedList
elemen, ia tidak dialihkan ke mana-mana - pautan ditakrifkan semula (jika anda tiba-tiba terlupa cara LinkedList berfungsi, lihat salah satu kuliah lama kami ). Jika sekarang nombor pertama dalam senarai kami ialah nombor х
, dan kami memasukkan nombor y pada permulaan senarai, semua yang diperlukan ialah:
x.previous = y;
y.previous = null;
y.next = x;
Untuk takrifan semula rujukan ini, kami tidak kisah berapa banyak nombor yang ada sekarangLinkedList
- sekurang-kurangnya satu, sekurang-kurangnya satu bilion. Kerumitan algoritma akan tetap - O(1).
GO TO FULL VERSION