Salom! Bugungi ma'ruzamiz qolganlardan biroz farq qiladi. Bu faqat bilvosita Java bilan bog'liqligi bilan farq qiladi. Biroq, bu mavzu har bir dasturchi uchun juda muhimdir. Biz algoritmlar haqida gaplashamiz . Algoritm nima? Oddiy qilib aytganda, bu kerakli natijaga erishish uchun bajarilishi kerak bo'lgan ma'lum harakatlar ketma-ketligi . Biz kundalik hayotda ko'pincha algoritmlardan foydalanamiz. Masalan, har kuni ertalab siz bir vazifaga duch kelasiz: maktabga yoki ishga kelish va shu bilan birga:
- Kiyingan
- Toza
- Yaxshi ovqatlangan
- Budilnikda uyg'onish.
- Dush qabul qiling, yuzingizni yuving.
- Nonushta tayyorlang, qahva / choy tayyorlang.
- Yemoq.
- Kechqurun kiyimingizni dazmollamagan bo'lsangiz, dazmollang.
- Kiyinib oling.
- Uyni tark et.
- Internetda sotib oling yoki yuklab oling "Ruscha shaxsiy ismlar lug'ati" 1966 yil nashri.
- Ushbu lug'atda ro'yxatimizdagi barcha nomlarni toping.
- Nomi lug'atning qaysi sahifasida ekanligini qog'ozga yozing.
- Bir qog'ozdagi eslatmalardan foydalanib, ismlarni tartibda qo'ying.
for
Siz ushbu vazifani bajaradigan muntazam tsiklni yozasiz
int[] numbers = new int[100];
// ..заполняем массив числами
for (int i: numbers) {
System.out.println(i);
}
Yozilgan algoritmning murakkabligi nimada? Chiziqli, O(N). Dastur bajarishi kerak bo'lgan harakatlar soni unga qancha raqam kiritilganiga bog'liq. Massivda 100 ta raqam bo'lsa, 100 ta amal (ekrandagi chiqishlar) bo'ladi, agar massivda 10 000 ta raqam bo'lsa, 10 000 ta amalni bajarish kerak bo'ladi. Bizning algoritmimizni yaxshilash mumkinmi? Yo'q. Har qanday holatda, biz N massivdan o'tishimiz va konsolga N chiqishni bajarishimiz kerak . Keling, yana bir misolni ko'rib chiqaylik.
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
Bizda bo'sh raqam bor LinkedList
, unga biz bir nechta raqamlarni kiritamiz. Bizning misolimizga bitta raqamni kiritish algoritmining murakkabligini LinkedList
va bu ro'yxatdagi elementlar soniga qanday bog'liqligini taxmin qilishimiz kerak. Javob: O(1) - doimiy murakkablik . Nega? E'tibor bering: har safar ro'yxatning boshiga raqam kiritamiz. Bundan tashqari, siz eslayotganingizdek, raqamlarni elementlarga kiritishda ular hech qanday joyga siljimaydi - havolalar qayta aniqlanadi (agar siz to'satdan LinkedList qanday ishlashini unutgan bo'lsangiz, bizning eski ma'ruzalarimizniLinkedList
ko'rib chiqing ). Agar hozir ro'yxatimizda birinchi raqam raqam bo'lsa va biz ro'yxatning boshiga y raqamini qo'shsak, faqat kerak bo'ladi: х
x.previous = y;
y.previous = null;
y.next = x;
Ushbu ma'lumotni qayta ta'riflash uchun biz uchun hozir qancha raqam borligi muhim emasLinkedList
- kamida bitta, kamida milliard. Algoritmning murakkabligi doimiy bo'ladi - O(1).
GO TO FULL VERSION