Салам! Бүгүнкү лекция башкалардан бир аз башкача болот. Бул Java менен кыйыр түрдө гана байланышкандыгы менен айырмаланат. Бирок, бул тема ар бир программист үчүн абдан маанилүү. Биз алгоритмдер жөнүндө сүйлөшөбүз . Алгоритм деген эмне? Жөнөкөй сөз менен айтканда, бул каалаган натыйжага жетүү үчүн аткарылышы керек иш-аракеттердин белгилүү ырааттуулугу . Биз күнүмдүк жашоодо алгоритмдерди көп колдонобуз. Мисалы, күн сайын эртең менен сиз бир милдетке туш болосуз: мектепке же жумушка келүү жана ошол эле учурда:
- Кийилген
- Таза
- Жакшы тойгон
- Ойготкуч саат менен ойгонуңуз.
- Душ кабыл ал, бетиңди жуу.
- Эртең мененки тамакты даярдаңыз, кофе/чай даярдаңыз.
- же.
- Кечке чейин кийимиңизди үтүктөй элек болсоңуз, үтүктөңүз.
- Кийинүү.
- Үйдөн кет.
- Интернеттен сатып алыңыз же жүктөп алыңыз "Орусча жеке ысымдардын сөздүгү" 1966-жылдагы басылышы.
- Бул сөздүктөн биздин тизмедеги ар бир ысымды табыңыз.
- Аты сөздүктүн кайсы бетинде жазылганын кагазга жаз.
- Кагаздагы жазууларды колдонуп, ысымдарды ирети менен жазыңыз.
for
Сиз бул тапшырманы аткарган кадимки цикл жазасыз
int[] numbers = new int[100];
// ..заполняем массив числами
for (int i: numbers) {
System.out.println(i);
}
Жазылган алгоритмдин татаалдыгы кандай? Сызыктуу, O(N). Программа аткара турган аракеттердин саны ага канча сан киргизилгенине жараша болот. Массивде 100 сан болсо, анда 100 аракет (экрандагы чыгаруу) болот.Эгер массивде 10 000 сан болсо, 10 000 аракетти аткаруу керек болот. Алгоритмибизди жакшыртса болобу? Жок. Кандай болгон күндө да, биз массивден N өтүшүбүз керек жана консолго N чыгышыбыз керек. Дагы бир мисалды карап көрөлү.
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
Бизде бош сан бар LinkedList
, ага бир нече сандарды киргизебиз. LinkedList
Биздин мисалга бир санды киргизүү алгоритминин татаалдыгын жана ал тизмедеги элементтердин санына кандайча көз каранды экенин баалашыбыз керек . Жооп O(1) - туруктуу татаалдык . Неге? Эскертүү: ар бир жолу биз тизменин башына сан киргизебиз. Мындан тышкары, эсиңизде болгондой, сандарды элементтерге киргизүүдө алар эч жакка жылдырылbyte - шилтемелер кайра аныкталат (эгерде сиз капысынан LinkedList кантип иштээрин унутуп калсаңыз, биздин эски лекцияларыбыздыLinkedList
карап көрүңүз ). Эгерде азыр биздин тизмедеги биринчи сан сан болсо жана биз тизменин башына y санын киргизсек, болгону: х
x.previous = y;
y.previous = null;
y.next = x;
Бул маалымдаманы кайра аныктоо үчүн азыр канча сан бар экени биз үчүн маанилүү эмесLinkedList
- жок дегенде бир, жок дегенде миллиард. Алгоритмдин татаалдыгы туруктуу болот - O(1).
GO TO FULL VERSION