Kamusta! Magiging iba ang lecture ngayon sa iba. Ito ay mag-iiba dahil ito ay hindi direktang nauugnay sa Java. Gayunpaman, 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 isang tiyak na pagkakasunud-sunod ng mga aksyon na dapat gawin upang makamit ang ninanais na resulta . Madalas kaming gumagamit ng mga algorithm sa pang-araw-araw na buhay. Halimbawa, tuwing umaga ay nahaharap ka sa isang gawain: pumunta sa paaralan o trabaho, at sa parehong oras ay:
- Nakabihis
- Malinis
- Busog na busog
- Gumising sa alarm clock.
- Maligo ka, maghugas ng mukha.
- Maghanda ng almusal, magtimpla ng kape/tsa.
- Kumain.
- Kung hindi mo pa naplantsa ang iyong mga damit mula noong gabi, plantsahin ang mga ito.
- Magbihis.
- Umalis sa bahay.
- Bumili o mag-download sa Internet na "Dictionary of Russian Personal Names" 1966 na edisyon.
- Hanapin ang bawat pangalan sa aming listahan sa diksyunaryong ito.
- Isulat sa isang piraso ng papel kung aling pahina ng diksyunaryo ang pangalan.
- Ayusin ang mga pangalan gamit ang mga tala sa isang piraso ng papel.
for
na nagsasagawa ng gawaing ito
int[] numbers = new int[100];
// ..заполняем массив числами
for (int i: numbers) {
System.out.println(i);
}
Ano ang pagiging kumplikado ng nakasulat na algorithm? Linear, O(N). Ang bilang ng mga aksyon na dapat gawin ng programa ay depende sa eksaktong bilang ng mga numero ang naipasa dito. Kung mayroong 100 numero sa array, magkakaroon ng 100 aksyon (mga output sa screen). Kung mayroong 10,000 na numero sa array, 10,000 aksyon ang kailangang isagawa. Maaari bang mapabuti ang aming algorithm? Hindi. Sa anumang kaso, kailangan nating gumawa ng N pass sa array at magsagawa ng N output sa console. Tingnan natin 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 tantyahin ang pagiging kumplikado ng algorithm para sa pagpasok ng isang numero sa LinkedList
ating halimbawa, at kung paano ito nakadepende sa bilang ng mga elemento sa listahan. Ang sagot ay O(1) - constant complexity . Bakit? Pakitandaan: sa tuwing maglalagay kami ng numero sa simula ng listahan. Bilang karagdagan, tulad ng naaalala mo, kapag naglalagay ng mga numero sa LinkedList
mga elemento, hindi sila inililipat kahit saan - ang mga link ay muling tinukoy (kung bigla mong nakalimutan kung paano gumagana ang LinkList, tingnan ang isa sa aming mga lumang lecture ). Kung ngayon ang unang numero sa aming listahan ay ang numero х
, at ipinasok namin ang numerong y sa simula ng listahan, ang kailangan lang ay:
x.previous = y;
y.previous = null;
y.next = x;
Para sa redefinition ng reference na ito, hindi mahalaga sa amin kung gaano karaming mga numero ang mayroon ngayonLinkedList
- kahit isa, kahit isang bilyon. Ang pagiging kumplikado ng algorithm ay magiging pare-pareho - O(1).
GO TO FULL VERSION