Hi! Ang aralin ngayon ay bahagyang naiiba sa iba. Ito ay mag-iiba dahil ito ay hindi direktang nauugnay sa Java. Iyon ay sinabi, ang paksang ito ay napakahalaga para sa bawat programmer. Pag-uusapan natin ang tungkol sa mga algorithm . Ano ang isang algorithm? Sa simpleng mga termino, ito ay ilang pagkakasunod-sunod ng mga aksyon na dapat kumpletuhin upang makamit ang ninanais na resulta . Madalas kaming gumagamit ng mga algorithm sa pang-araw-araw na buhay. Halimbawa, tuwing umaga mayroon kang isang partikular na gawain: pumunta sa paaralan o trabaho, at kasabay nito ay:
- Nakadamit
- Malinis
- Pinakain
- Gumising gamit ang alarm clock.
- Maligo ka at maghilamos.
- Gumawa ng almusal at ilang kape o tsaa.
- Kumain.
- Kung hindi mo naplantsa ang iyong mga damit noong nakaraang gabi, pagkatapos ay plantsahin ang mga ito.
- Magbihis.
- Umalis sa bahay.
- Bilhin o i-download ang 1961 na edisyon ng Webster's Third New International Dictionary.
- Hanapin ang bawat pangalan mula sa aming listahan sa diksyunaryong ito.
- Sa isang piraso ng papel, isulat ang pahina ng diksyunaryo kung saan matatagpuan ang pangalan.
- Gamitin ang mga piraso ng papel upang pagbukud-bukurin ang mga pangalan.
for
loop na nagsasagawa ng gawaing ito
int[] numbers = new int[100];
// ...fill the array with numbers
for (int i: numbers) {
System.out.println(i);
}
Ano ang pagiging kumplikado ng algorithm na ito? Linear, ibig sabihin, O(n). Ang bilang ng mga aksyon na dapat gawin ng programa ay depende sa kung gaano karaming mga numero ang ipinapasa dito. Kung mayroong 100 numero sa array, magkakaroon ng 100 aksyon (mga pahayag upang ipakita ang mga string sa screen). Kung mayroong 10,000 na numero sa array, 10,000 na aksyon ang dapat gawin. Maaari bang mapabuti ang aming algorithm sa anumang paraan? Hindi. Anuman ang mangyari, kailangan nating gumawa ng N pass sa array at magsagawa ng N statement para magpakita ng mga string sa console. Isaalang-alang ang isa pang halimbawa.
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
Mayroon kaming isang walang laman LinkedList
kung saan nagpasok kami ng ilang mga numero. Kailangan nating suriin ang pagiging kumplikado ng algorithm ng pagpasok ng isang numero sa sa LinkedList
aming halimbawa, at kung paano ito nakadepende sa bilang ng mga elemento sa listahan. Ang sagot ay O(1), ibig sabihin, pare-pareho ang pagiging kumplikado . Bakit? Tandaan na ipinapasok namin ang bawat numero sa simula ng listahan. Bilang karagdagan, maaalala mo na kapag nagpasok ka ng isang numero sa isang LinkedList
, ang mga elemento ay hindi gumagalaw kahit saan. Ang mga link (o mga sanggunian) ay ina-update (kung nakalimutan mo kung paano gumagana ang LinkList, tingnan ang isa sa aming mga lumang aralin ). Kung ang unang numero sa aming listahan ay x
, at ilalagay namin ang numerong y sa harap ng listahan, ang kailangan lang naming gawin ay ito:
x.previous = y;
y.previous = null;
y.next = x;
Kapag na-update namin ang mga link, wala kaming pakialam kung ilang numero na ang nasaLinkedList
, isa man o isang bilyon. Ang pagiging kumplikado ng algorithm ay pare-pareho, ibig sabihin, O(1).