Салом! Лекцияи имруза аз дигарон андаке фарк мекунад. Он бо он фарқ мекунад, ки он танҳо бавосита бо Java алоқаманд аст. Аммо, ин мавзӯъ барои ҳар як барномасоз хеле муҳим аст. Мо дар бораи алгоритмҳо сӯҳбат хоҳем кард . Алгоритм чист? Ба ибораи оддӣ, ин як пайдарпаии муайяни амалҳост, ки барои ба даст овардани натиҷаи дилхоҳ бояд анҷом дода шаванд . Мо аксар вақт алгоритмҳоро дар ҳаёти ҳаррӯза истифода мебарем. Масалан, ҳар саҳар шумо бо вазифае рӯ ба рӯ мешавед: ба мактаб ё кор омадан ва дар айни замон:
- Либос
- Тоза
- Хуб сер
- Ба соати зангдор бедор шавед.
- Душ гиред, рӯятонро бишӯед.
- Наҳорӣ тайёр кунед, қаҳва/чой тайёр кунед.
- Бихӯред.
- Агар шумо аз шом либосҳои худро дарзмол накарда бошед, онҳоро дарзмол кунед.
- Пӯшед.
- Хонаро тарк кунед.
- Дар интернет "Луғати номҳои шахсии русӣ" нашри 1966 харед ё зеркашӣ кунед.
- Ҳар як номро дар рӯйхати мо дар ин луғат пайдо кунед.
- Дар варақе нависед, ки ном дар кадом саҳифаи лугат аст.
- Бо истифода аз қайдҳо дар варақ номҳоро ба тартиб гузоред.
for
, ки ин вазифаро иҷро мекунад
int[] numbers = new int[100];
// ..заполняем массив числами
for (int i: numbers) {
System.out.println(i);
}
Мушкorи алгоритми хаттӣ чӣ гуна аст? Хатӣ, O(N). Миқдори амалҳое, ки барнома бояд иҷро кунад, аз он вобаста аст, ки чанд рақам ба он ворид карда шудааст. Агар дар массив 100 адад бошад, 100 амал (баромад дар экран) ба амал меояд. Оё алгоритми моро такмил додан мумкин аст? Не. Дар ҳар сурат, мо маҷбур мешавем, ки 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) - мураккабии доимӣ аст . Чаро? Лутфан таваҷҷӯҳ намоед: ҳар дафъае, ки мо рақамро дар аввали рӯйхат дохил мекунем. Илова бар ин, тавре ки шумо дар хотир доред, ҳангоми ворид кардани рақамҳо ба LinkedList
элементҳо онҳо ба ягон ҷо кӯчонида намешаванд - истинодҳо аз нав муайян карда мешаванд (агар шумо ногаҳон чӣ гуна кор кардани LinkedList-ро фаромӯш карда бошед, ба яке аз лексияҳои кӯҳнаи мо нигаред ). Агар ҳоло рақами аввал дар рӯйхати мо рақам бошад х
ва мо рақами y-ро дар аввали рӯйхат дохил кунем, ҳама чиз лозим аст:
x.previous = y;
y.previous = null;
y.next = x;
Барои ин азнавтаърифи истинод барои мо муҳим нест, ки ҳоло чанд рақам вуҷуд дорадLinkedList
- ҳадди аққал як, ҳадди аққал як миллиард. Мушкorи алгоритм доимӣ хоҳад буд - O(1).
GO TO FULL VERSION