logo

Algoritmo apibrėžimas, tipai, sudėtingumas ir pavyzdžiai

Algoritmas yra tiksliai apibrėžtas nuoseklus skaičiavimo metodas, kuris priima reikšmę arba reikšmių rinkinį kaip įvestį ir sukuria išvestį (-es), reikalingą (-as) problemai išspręsti.

Arba galime pasakyti, kad sakoma, kad algoritmas yra tikslus tada ir tik tada, kai jis nustoja gauti tinkamą kiekvieno įvesties egzemplioriaus išvestį.



ALGORITMŲ POREIKIS:

Algoritmai naudojami problemoms spręsti arba užduotims sistemingai ir efektyviai automatizuoti. Tai yra instrukcijų arba taisyklių rinkinys, pagal kurį kompiuteris ar programinė įranga padeda atlikti tam tikrą užduotį arba išspręsti problemą.

localdate java

Yra keletas priežasčių, kodėl naudojame algoritmus:



    Efektyvumas: algoritmai gali atlikti užduotis greitai ir tiksliai, todėl jie yra esminis įrankis atliekant užduotis, kurioms reikia daug skaičiavimų ar duomenų apdorojimo. Nuoseklumas: algoritmai yra kartojami ir duoda nuoseklius rezultatus kiekvieną kartą, kai jie vykdomi. Tai svarbu dirbant su dideliu duomenų kiekiu ar sudėtingais procesais. Mastelio keitimas: Algoritmus galima padidinti, kad būtų galima apdoroti didelius duomenų rinkinius arba sudėtingas problemas, todėl jie yra naudingi programoms, kurioms reikia apdoroti didelius duomenų kiekius. Automatizavimas: algoritmai gali automatizuoti pasikartojančias užduotis, sumažindami žmogaus įsikišimo poreikį ir atlaisvindami laiko kitoms užduotims atlikti. Standartizavimas: Algoritmus galima standartizuoti ir dalytis skirtingoms komandoms ar organizacijoms, todėl žmonėms bus lengviau bendradarbiauti ir dalytis žiniomis.

Apskritai, algoritmai yra esminis įrankis sprendžiant problemas įvairiose srityse, įskaitant kompiuterių mokslą, inžineriją, duomenų analizę, finansus ir daugelį kitų.

Pavyzdys:

Apsvarstykite dėžę, kurioje niekas nemato, kas vyksta viduje, mes sakome, kad juodoji dėžė.

Mes pateikiame įvestį į dėžutę ir ji suteikia mums reikalingą išvestį, tačiau procedūra, kurią mums gali tekti žinoti konvertuojant įvestį į norimą išvestį, yra ALGORITMAS.



Algoritmas nepriklauso nuo naudojamos kalbos. Programuotojui nurodoma logika, naudojama problemai išspręsti. Taigi, tai yra logiška žingsnis po žingsnio procedūra, kuri programuotojams veikia kaip planas.

Realūs pavyzdžiai, apibrėžiantys algoritmų naudojimą:

  • Apsvarstykite laikrodį. Žinome, kad laikrodis tiksi, bet kaip gamintojas nustato tas veržles ir varžtus, kad jie judėtų kas 60 sekundžių, min rodyklė judėtų ir kas 60 minučių – valandinė rodyklė? Taigi, norint išspręsti šią problemą, už jos turi būti algoritmas.
  • Matėte, kad kažkas gamina jūsų mėgstamą maistą? Ar receptas jai reikalingas? Taip, tai būtina, nes receptas yra nuosekli procedūra, kuri žalią bulvę paverčia vėsia bulve. Štai kas yra algoritmas: atlikite procedūrą, kad gautumėte norimą išvestį. Ar būtina laikytis sekos? Taip, seka yra svarbiausias dalykas, kurio reikia laikytis, kad gautume tai, ko norime.

Algoritmų tipai:

  • Rūšiavimo algoritmai: Rūšiavimas pagal burbulus, įterpimo rūšiavimas ir daug daugiau. Šie algoritmai naudojami duomenims rūšiuoti tam tikru formatu.
  • Paieškos algoritmai: Linijinė paieška, dvejetainė paieška ir tt Šie algoritmai naudojami ieškant vartotojo reikalaujamos reikšmės ar įrašo.
  • Grafikų algoritmai : Jis naudojamas ieškant problemų, pvz., trumpiausio kelio tarp miestų, ir realių problemų, pvz., keliaujančio pardavėjo, sprendimų.

Rūšiavimo algoritmai yra algoritmai, kurie paima elementų rinkinį ir pertvarko juos nurodyta tvarka (pvz., didėjančia arba mažėjančia tvarka). Yra daug skirtingų rūšiavimo algoritmų, kurių kiekvienas turi savo stipriąsias ir silpnąsias puses. Kai kurie iš dažniausiai naudojamų rūšiavimo algoritmų yra šie:

Burbulų rūšiavimas: Paprastas rūšiavimo algoritmas, kuris pakartotinai peržiūri sąrašą, lygina gretimus elementus ir sukeičia juos, jei jie yra neteisinga tvarka.

Įterpimo rūšiavimas: Paprastas rūšiavimo algoritmas, kuris sukuria galutinį surūšiuotą masyvą po vieną elementą, lygindamas kiekvieną naują elementą su jau surūšiuotais elementais ir įterpdamas jį į tinkamą vietą.

Pasirinkimo rūšiavimas: Paprastas rūšiavimo algoritmas, kuris pakartotinai parenka minimalų elementą iš nerūšiuotos masyvo dalies ir perkelia jį į rūšiuojamos dalies pabaigą.

Sujungti rūšiavimą: „Skaldyk ir užgauk“ rūšiavimo algoritmas, veikiantis padalijant nerūšiuotą sąrašą į n antrinių sąrašų, rūšiuojant kiekvieną posąrašį ir vėl sujungiant juos į vieną surūšiuotą sąrašą.

Greitas rūšiavimas: „Skaldyk ir valdyk“ rūšiavimo algoritmas, veikiantis pasirenkant sukamąjį elementą iš masyvo ir padalijant kitus elementus į du antrinius masyvus, atsižvelgiant į tai, ar jie yra mažesni, ar didesni už sukimąsi. Tada submasyvai rūšiuojami rekursyviai.

Kiekvienas iš šių algoritmų turi skirtingą laiko ir erdvės sudėtingumą, todėl kai kurie yra tinkamesni tam tikrais naudojimo atvejais nei kiti.

Paieškos algoritmai yra algoritmai, ieškantys tam tikro elemento arba reikšmės duomenų struktūroje (pvz., masyve arba susietame sąraše). Kai kurie dažniausiai naudojami paieškos algoritmai:

Linijinė paieška: Paprastas paieškos algoritmas, kuris kartoja kiekvieną sąrašo elementą, kol randa atitiktį.

Dvejetainė paieška: Paieškos algoritmas, veikiantis surūšiuotą sąrašą padalijus per pusę, kol randamas norimas elementas arba galima nustatyti, kad elemento nėra.

Peršokimo paieška: Paieškos algoritmas, kuris veikia fiksuotais sąrašo žingsniais šokinėjant, kol randamas tinkamas kandidatas, o tada atliekant tiesinę paiešką aplinkiniuose elementuose.

Interpoliacijos paieška : paieškos algoritmas, kuris veikia naudodamas informaciją apie reikšmių diapazoną sąraše, kad įvertintų norimo elemento padėtį ir patikrintų, ar jis tikrai yra.

Maišos lentelės paieška: Paieškos algoritmas, kuris naudoja maišos funkciją elementams susieti su masyvo indeksais, o tada atlieka pastovaus laiko paieškas masyve, kad surastų norimą elementą.

Kiekvienas iš šių algoritmų turi skirtingą laiko ir erdvės sudėtingumą, todėl kai kurie yra tinkamesni tam tikrais naudojimo atvejais nei kiti. Naudojimo algoritmo pasirinkimas priklauso nuo konkrečių problemos reikalavimų, tokių kaip duomenų struktūros dydis, reikšmių pasiskirstymas ir pageidaujamas laiko sudėtingumas.

kaip naudotis mysql darbastaliu

Grafiniai algoritmai yra algoritmų rinkinys, naudojamas apdoroti, analizuoti ir suprasti grafiko duomenų struktūras. Grafikai yra matematinės struktūros, naudojamos ryšiams tarp objektų modeliuoti, kai objektai vaizduojami kaip viršūnės (arba mazgai), o ryšiai tarp jų – kaip briaunos. Grafiniai algoritmai naudojami įvairiose programose, tokiose kaip tinklo analizė, socialinių tinklų analizė, rekomendacijų sistemos ir daugelyje kitų sričių, kur svarbu suprasti ryšius tarp objektų. Kai kurie įprasti grafiko algoritmai yra šie:

Trumpiausio kelio algoritmai (pvz., Dijkstra's, Bellman-Ford, A*)
Minimalus aprėpties medžio algoritmai (pvz., Kruskal, Prim)
Maksimalaus srauto algoritmai (pvz., Ford-Fulkerson, Edmonds-Karp)
Tinklo srauto algoritmai (pvz., dvišalis atitikimas)
Ryšio algoritmai (pvz., paieška pagal gylį, paieška pagal plotį)

Kodėl mes naudojame algoritmus?

Apsvarstykite, kaip du vaikai, Amanas ir Rohanas, sprendžia Rubiko kubą. Amanas žino, kaip tai išspręsti tam tikru žingsnių skaičiumi. Kita vertus, Rohanas žino, kad tai padarys, bet nežino apie procedūrą. Amanas išsprendžia kubą per 2 minutes, o Rohanas vis dar įstrigo ir dienos pabaigoje jam kažkaip pavyko jį išspręsti (galbūt apgavo, nes procedūra yra būtina).

Taigi laikas, reikalingas išspręsti naudojant procedūrą/algoritmą, yra daug efektyvesnis nei laikas be jokios procedūros. Taigi algoritmo poreikis yra būtinas.

Kalbant apie IT problemos sprendimo kūrimą, kompiuteriai yra greiti, bet ne be galo greiti. Atmintis gali būti nebrangi, bet ne nemokama. Taigi, laiko skaičiavimas yra ribotas išteklius, taip pat ir erdvė atmintyje. Taigi turėtume išmintingai naudoti šiuos išteklius, o efektyvūs laiko ir erdvės algoritmai padės tai padaryti.

Algoritmo kūrimas:

Kadangi algoritmas yra nepriklausomas nuo kalbos, rašome veiksmus, kad parodytume logiką, slypinčią už problemos sprendimo. Tačiau prieš rašydami algoritmą atminkite šiuos dalykus:

  • Algoritmas turi būti aiškus ir nedviprasmiškas.
  • Algoritme turi būti 0 ar daugiau tiksliai apibrėžtų įvesčių.
  • Algoritmas turi sukurti vieną ar daugiau tiksliai apibrėžtų išėjimų, kurie yra lygiaverčiai norimai produkcijai. Atlikus tam tikrą žingsnių skaičių, algoritmai turi sustoti.
  • Algoritmai turi sustoti arba baigtis atlikus baigtinį žingsnių skaičių.
  • Algoritme turėtų būti pateikiamos nuoseklios instrukcijos ir jos turėtų būti nepriklausomos nuo jokio kompiuterio kodo.

Pavyzdys: algoritmas padauginti 2 skaičius ir išspausdinti rezultatą:

1 žingsnis: Pradėti
2 žingsnis: Gaukite žinių apie įvestį. Čia mums reikia 3 kintamųjų; a ir b bus vartotojo įvestis, o c – rezultatas.
3 veiksmas: Deklaruoti a, b, c kintamuosius.
4 veiksmas: Paimkite a ir b kintamųjų įvestį iš vartotojo.
5 veiksmas: Žinokite problemą ir raskite sprendimą naudodami operatorius, duomenų struktūras ir logiką

Turime padauginti a ir b kintamuosius, kad naudotume * operatorių ir priskirtume rezultatą c.
Tai yra c <- a * b

6 veiksmas: Patikrinkite, kaip pateikti išvestį, Čia turime atspausdinti išvestį. Taigi parašykite print c
7 veiksmas: Galas

1 pavyzdys: Parašykite algoritmą, kad rastumėte maksimalų visų masyve esančių elementų skaičių.
Laikykitės toliau pateikto algoritmo metodo:

1 žingsnis: Paleiskite programą
2 žingsnis: Deklaruokite kintamąjį max su pirmojo masyvo elemento reikšme.
3 veiksmas: Palyginkite max su kitais elementais naudodami kilpą.
4 veiksmas: Jei maks 5 veiksmas: Jei elemento neliko, grąžinkite arba atspausdinkite max, kitaip pereikite prie 3 veiksmo.
6 veiksmas: Sprendimo pabaiga

2 pavyzdys: Parašykite algoritmą, kad surastumėte 3 dalykų vidurkį.
Laikykitės toliau pateikto algoritmo metodo:

1 žingsnis: Paleiskite programą
2 žingsnis: Tarkime, paskelbkite ir perskaitykite 3 temą S1, S2, S3
3 veiksmas: Apskaičiuokite visų 3 dalyko reikšmių sumą ir išsaugokite rezultatą kintamajame Sum (Suma = S1+S2+S3)
4 veiksmas: Padalinkite sumą iš 3 ir priskirkite ją vidutiniam kintamajam. (Vidurkis = suma/3)
5 veiksmas: Atspausdinkite vertę 3 dalykų vidurkis
6 veiksmas: Sprendimo pabaiga

Žinokite apie algoritmo sudėtingumą:

Algoritmų sudėtingumas reiškia išteklių (pvz., laiko ar atminties) kiekį, reikalingą problemai išspręsti arba užduočiai atlikti. Dažniausias sudėtingumo matas yra laiko sudėtingumas, kuris nurodo laiką, kurio algoritmas užtrunka, kad gautų rezultatą, atsižvelgiant į įvesties dydį. Atminties sudėtingumas reiškia atminties kiekį, kurį naudoja algoritmas. Algoritmų kūrėjai stengiasi sukurti algoritmus su kuo mažiau laiko ir atminties sudėtingumu, nes tai daro juos efektyvesnius ir keičiamo mastelio.

abėcėlės numeravimas

Algoritmo sudėtingumas yra funkcija, apibūdinanti algoritmo efektyvumą atsižvelgiant į duomenų kiekį, kurį algoritmas turi apdoroti.

Paprastai šios funkcijos domenui ir diapazonui yra natūralūs vienetai.

Algoritmas analizuojamas naudojant laiko sudėtingumą ir erdvės sudėtingumą. Veiksmingo algoritmo parašymas padeda sunaudoti minimalų laiką logikai apdoroti. Algoritmui A jis vertinamas remiantis dviem n dydžio įvesties parametrais:

  • Laiko sudėtingumas: Laikas, per kurį algoritmas išsprendžia problemą. Jis matuojamas apskaičiuojant kilpų iteraciją, palyginimų skaičių ir kt.
  • Laiko sudėtingumas yra funkcija, apibūdinanti laiką, kurio algoritmas užtrunka, atsižvelgiant į įvesties į algoritmą kiekį.
  • Laikas gali reikšti atliktų atminties kreipimųsi skaičių, sveikųjų skaičių palyginimų skaičių, vidinės kilpos vykdymo kartų skaičių arba kokį nors kitą natūralų vienetą, susijusį su algoritmo realiuoju laiku.
  • Erdvės sudėtingumas: Erdvė, kurią užėmė algoritmas problemai išspręsti. Tai apima erdvę, kurią naudoja būtini įvesties kintamieji, ir bet kokią papildomą erdvę (išskyrus įvesties užimamą erdvę), kurią naudoja algoritmas. Pavyzdžiui, jei naudojame maišos lentelę (tam tikros rūšies duomenų struktūrą), mums reikia masyvo, kad išsaugotume reikšmes
  • tai yra papildomai užimta vieta, todėl ji bus įtraukta į algoritmo sudėtingumą. Ši papildoma erdvė žinoma kaip pagalbinė erdvė.
  • Erdvės sudėtingumas yra funkcija, apibūdinanti algoritmo atminties (erdvės) kiekį, atsižvelgiant į algoritmo įvesties kiekį.
  • Erdvės sudėtingumas kartais ignoruojamas, nes naudojama erdvė yra minimali ir (arba) akivaizdi, tačiau kartais tai tampa laiko problema.

.Laiko operacijų sudėtingumas:

  • Duomenų struktūros pasirinkimas turėtų būti pagrįstas operacijų, kurios bus atliekamos, laiko sudėtingumu.
  • Laiko sudėtingumas apibrėžiamas atsižvelgiant į tai, kiek kartų reikia paleisti tam tikrą algoritmą, atsižvelgiant į įvesties ilgį.
  • Algoritmo sudėtingumas laiko atžvilgiu yra laikas, kurio reikia kiekvienam teiginiui užpildyti. Tai labai priklauso nuo apdorojamų duomenų dydžio.
  • Pavyzdžiui, jei jums reikia dažnai atlikti paieškas, turėtumėte naudoti dvejetainį paieškos medį.

. Operacijų erdvės sudėtingumas:

  • Duomenų struktūros pasirinkimas turėtų būti pagrįstas operacijų, kurios bus atliekamos, sudėtingumu erdvėje.
  • Atminties, kurią programa naudoja jai vykdyti, kiekį parodo jos erdvės sudėtingumas.
  • Kadangi programai reikia atminties, kad galėtų saugoti įvesties duomenis ir laikinąsias reikšmes, kai ji veikia, erdvės sudėtingumas yra pagalbinė ir įvesties erdvė.
  • Pavyzdžiui, jei jums reikia saugoti daug duomenų, turėtumėte naudoti masyvą.

sudėtingais atvejais:

Yra du dažniausiai tiriami algoritmų sudėtingumo atvejai:

1. Geriausio atvejo sudėtingumas: Geriausias algoritmo scenarijus yra scenarijus, kai algoritmas atlieka mažiausią darbo kiekį (pvz., trunka trumpiausiai, naudoja mažiausiai atminties ir pan.).

2. Blogiausio atvejo sudėtingumas: Blogiausias algoritmo scenarijus yra scenarijus, kai algoritmas atlieka didžiausią darbo kiekį (pvz., trunka ilgiausią laiką, naudoja daugiausiai atminties ir pan.).

Analizuojant algoritmo sudėtingumą, dažnai informatyviau yra ištirti blogiausią scenarijų, nes tai garantuoja viršutinę algoritmo našumo ribą. Kartais atliekama geriausio scenarijaus analizė, tačiau paprastai ji yra mažiau svarbi, nes suteikia apatinę ribą, kurią pasiekti dažnai yra nereikšminga.

Algoritmų pranašumai

  • Lengva suprasti: Kadangi tai laipsniškas tam tikros problemos sprendimo vaizdas, jį lengva suprasti.
  • Nepriklausoma nuo kalbos: Ji nepriklauso nuo jokios programavimo kalbos, todėl ją gali lengvai suprasti bet kas.
  • Derinimas / klaidų paieška: Kiekvienas žingsnis yra nepriklausomas / vyksta sraute, todėl bus lengva pastebėti ir ištaisyti klaidą.
  • Subproblemos: Jis parašytas srautu, todėl dabar programuotojas gali padalinti užduotis, todėl jas lengviau koduoti.

Algoritmų trūkumai

  • Veiksmingų algoritmų kūrimas užima daug laiko ir reikalauja gerų loginių įgūdžių.
  • Nemalonu, kad algoritmuose rodomas išsišakojimas ir kilpos.