logo

Algoritmien määritelmä, tyypit, monimutkaisuus ja esimerkit

Algoritmi on hyvin määritelty peräkkäinen laskentatekniikka, joka hyväksyy arvon tai arvojen joukon syötteeksi ja tuottaa ongelman ratkaisemiseen tarvittavat tulosteet.

Tai voimme sanoa, että algoritmin sanotaan olevan tarkka silloin ja vain, jos se pysähtyy oikeaan lähtöön kullekin tuloinstanssille.



ALGORITMIEN TARVE:

Algoritmeilla ratkaistaan ​​ongelmia tai automatisoidaan tehtäviä systemaattisesti ja tehokkaasti. Ne ovat joukko ohjeita tai sääntöjä, jotka ohjaavat tietokonetta tai ohjelmistoa suorittamaan tiettyä tehtävää tai ratkaisemaan ongelman.

json json-esimerkissä

On useita syitä, miksi käytämme algoritmeja:



    Tehokkuus: Algoritmit voivat suorittaa tehtäviä nopeasti ja tarkasti, joten ne ovat olennainen työkalu tehtäviin, jotka vaativat paljon laskelmia tai tietojenkäsittelyä. Johdonmukaisuus: Algoritmit ovat toistettavissa ja tuottavat johdonmukaisia ​​tuloksia joka kerta, kun ne suoritetaan. Tämä on tärkeää käsiteltäessä suuria tietomääriä tai monimutkaisia ​​prosesseja. Skaalautuvuus: Algoritmeja voidaan skaalata käsittelemään suuria tietojoukkoja tai monimutkaisia ​​ongelmia, mikä tekee niistä hyödyllisiä sovelluksille, jotka vaativat suuria tietomääriä. Automatisointi: Algoritmit voivat automatisoida toistuvia tehtäviä, mikä vähentää ihmisen väliintulon tarvetta ja vapauttaa aikaa muihin tehtäviin. Standardointi: Algoritmeja voidaan standardoida ja jakaa eri ryhmien tai organisaatioiden kesken, mikä helpottaa ihmisten yhteistyötä ja tiedon jakamista.

Kaiken kaikkiaan algoritmit ovat olennainen työkalu ongelmien ratkaisemiseen monilla aloilla, mukaan lukien tietojenkäsittelytiede, suunnittelu, data-analyysi, rahoitus ja monet muut.

Esimerkki:

Ajattele laatikkoa, jossa kukaan ei näe, mitä sisällä tapahtuu, sanomme musta laatikko.

Annamme syötteen laatikkoon ja se antaa meille tarvitsemamme lähdön, mutta menettely, joka meidän on ehkä tiedettävä syötteen muuntamisen takana halutuksi tuotokseksi, on ALGORITMI.



Algoritmi on riippumaton käytetystä kielestä. Se kertoo ohjelmoijalle ongelman ratkaisemiseen käytetyn logiikan. Joten, se on looginen vaiheittainen menettely, joka toimii ohjelmoijien suunnitelmana.

Tosielämän esimerkkejä, jotka määrittelevät algoritmien käytön:

  • Harkitse kelloa. Tiedämme, että kello tikittää, mutta kuinka valmistaja asettaa ne mutterit ja pultit niin, että se liikkuu 60 sekunnin välein, minuuttiosoittimen pitäisi liikkua ja 60 minuutin välein tuntiosoittimen pitäisi liikkua? Joten tämän ongelman ratkaisemiseksi sen takana on oltava algoritmi.
  • Oletko nähnyt jonkun valmistamassa suosikkiruokaasi sinulle? Onko resepti siihen tarpeellinen? Kyllä, se on välttämätöntä, koska resepti on peräkkäinen toimenpide, joka muuttaa raa'an perunan kylmäksi perunaksi. Tämä on algoritmi: prosessin noudattaminen halutun tulosteen saamiseksi. Onko järjestystä tarpeen noudattaa? Kyllä, järjestys on tärkein asia, jota on noudatettava saadaksemme haluamamme.

Algoritmien tyypit:

  • Lajittelualgoritmit: Kuplalajittelu, lisäyslajittelu ja paljon muuta. Näitä algoritmeja käytetään tietojen lajitteluun tiettyyn muotoon.
  • Hakualgoritmit: Lineaarinen haku, binäärihaku jne. Näitä algoritmeja käytetään käyttäjän vaatiman arvon tai tietueen löytämiseen.
  • Graafialgoritmit : Sitä käytetään ratkaisujen löytämiseen ongelmiin, kuten lyhimmän polun löytämiseen kaupunkien välillä, ja tosielämän ongelmiin, kuten matkamyyjien ongelmiin.

Lajittelualgoritmit ovat algoritmeja, jotka ottavat joukon elementtejä ja järjestävät ne uudelleen tiettyyn järjestykseen (esim. nousevaan tai laskevaan). Lajittelualgoritmeja on monia erilaisia, joista jokaisella on omat vahvuutensa ja heikkoutensa. Jotkut yleisimmin käytetyistä lajittelualgoritmeista ovat:

Kuplalajittelu: Yksinkertainen lajittelualgoritmi, joka liikkuu toistuvasti luettelon läpi, vertaa vierekkäisiä elementtejä ja vaihtaa ne, jos ne ovat väärässä järjestyksessä.

Lisäyslajittelu: Yksinkertainen lajittelualgoritmi, joka rakentaa lopullisen lajitellun taulukon alkio kerrallaan vertaamalla kutakin uutta kohdetta jo lajiteltuihin alkioihin ja lisäämällä sen oikeaan paikkaan.

Valinnan lajittelu: Yksinkertainen lajittelualgoritmi, joka valitsee toistuvasti minimielementin taulukon lajittelemattomasta osasta ja siirtää sen lajitellun osan loppuun.

Yhdistä lajittelu: Jaa ja hallitse -lajittelualgoritmi, joka toimii jakamalla lajittelemattoman luettelon n aliluetteloon, lajittelemalla jokaisen aliluettelon ja yhdistämällä ne sitten takaisin yhdeksi lajiteltuun luetteloon.

Nopea lajittelu: Jaa ja hallitse -lajittelualgoritmi, joka toimii valitsemalla pivot-elementin taulukosta ja jakamalla muut elementit kahdeksi alitaulukoksi sen mukaan, ovatko ne pienempiä vai suurempia kuin pivot. Alitaulukot lajitellaan sitten rekursiivisesti.

Jokaisella näistä algoritmeista on erilainen aika- ja tilamonimutkaisuus, joten jotkut sopivat tiettyihin käyttötapauksiin paremmin kuin toiset.

Hakualgoritmit ovat algoritmeja, jotka etsivät tiettyä elementtiä tai arvoa tietorakenteesta (kuten taulukosta tai linkitetystä luettelosta). Jotkut yleisimmin käytetyistä hakualgoritmeista ovat:

Lineaarinen haku: Yksinkertainen hakualgoritmi, joka toistaa luettelon jokaisen elementin, kunnes se löytää osuman.

Binäärihaku: Hakualgoritmi, joka toimii jakamalla lajiteltu lista kahtia toistuvasti, kunnes haluttu elementti löytyy tai voidaan todeta, ettei elementtiä ole.

Hyppyhaku: Hakualgoritmi, joka toimii hyppäämällä eteenpäin luettelon kiinteillä vaiheilla, kunnes sopiva ehdokas löytyy, ja suorittamalla sitten lineaarihaun ympäröivissä elementeissä.

Interpolaatiohaku : Hakualgoritmi, joka käyttää luettelon arvoalueen tietoja arvioidakseen halutun elementin sijainnin ja varmistaakseen sitten, että se todella on olemassa.

Hash-taulukkohaku: Hakualgoritmi, joka käyttää hash-funktiota yhdistämään elementit taulukon indekseihin ja suorittaa sitten vakioaikaisia ​​hakuja taulukosta löytääkseen halutun elementin.

Jokaisella näistä algoritmeista on erilainen aika- ja tilamonimutkaisuus, joten jotkut sopivat tiettyihin käyttötapauksiin paremmin kuin toiset. Käytettävän algoritmin valinta riippuu ongelman erityisvaatimuksista, kuten tietorakenteen koosta, arvojen jakautumisesta ja halutusta aikamonimutkaisuudesta.

Graafialgoritmit ovat joukko algoritmeja, joita käytetään käsittelemään, analysoimaan ja ymmärtämään kuvaajatietorakenteita. Graafit ovat matemaattisia rakenteita, joita käytetään mallintamaan objektien välisiä suhteita, joissa objektit esitetään kärkeinä (tai solmuina) ja niiden väliset suhteet reunoina. Graafialgoritmeja käytetään monissa sovelluksissa, kuten verkko-analyysissä, sosiaalisten verkostojen analysoinnissa, suositusjärjestelmissä ja monilla muilla aloilla, joissa objektien välisten suhteiden ymmärtäminen on tärkeää. Joitakin yleisiä kaavioalgoritmeja ovat:

Lyhimmän polun algoritmit (esim. Dijkstra's, Bellman-Ford, A*)
Minimi Spanning Tree -algoritmit (esim. Kruskal, Prim)
Maksimivirtausalgoritmit (esim. Ford-Fulkerson, Edmonds-Karp)
Network Flow -algoritmit (esim. Bipartite Matching)
Yhteysalgoritmit (esim. syvyyshaku, leveyshaku)

Miksi käytämme algoritmeja?

Ajattele kahta lasta, Amania ja Rohania, ratkaisemassa Rubikin kuution. Aman osaa ratkaista sen tietyssä määrässä vaiheita. Toisaalta Rohan tietää tekevänsä sen, mutta ei ole tietoinen menettelystä. Aman ratkaisee kuution 2 minuutissa, kun taas Rohan on edelleen jumissa, ja päivän päätteeksi hän onnistui jotenkin ratkaisemaan sen (saattaa pettää, koska toimenpide on välttämätön).

Joten prosessin/algoritmin ratkaisemiseen tarvittava aika on paljon tehokkaampi kuin ilman mitään menettelyä. Siksi algoritmin tarve on välttämätön.

IT-ongelman ratkaisun suunnittelussa tietokoneet ovat nopeita, mutta eivät äärettömän nopeita. Muisti voi olla edullinen, mutta ei ilmainen. Joten laskenta-aika on siis rajoitettu resurssi ja niin on myös muistitila. Joten meidän tulee käyttää näitä resursseja viisaasti, ja algoritmit, jotka ovat tehokkaat ajan ja tilan suhteen, auttavat sinua tekemään niin.

Algoritmin luominen:

Koska algoritmi on kielestä riippumaton, kirjoitamme vaiheet havainnollistamaan ongelman ratkaisemiseen käytettävän ratkaisun takana olevaa logiikkaa. Mutta ennen kuin kirjoitat algoritmin, pidä seuraavat asiat mielessä:

  • Algoritmin tulee olla selkeä ja yksiselitteinen.
  • Algoritmissa tulee olla 0 tai useampi tarkasti määritelty syöte.
  • Algoritmin on tuotettava yksi tai useampi tarkasti määritelty tulos, joka vastaa haluttua tulosta. Tietyn määrän vaiheita jälkeen algoritmien on pysäytettävä.
  • Algoritmit täytyy pysähtyä tai päättyä rajallisen määrän vaiheiden jälkeen.
  • Algoritmissa tulee toimittaa vaiheittaiset ohjeet, ja niiden tulee olla riippumattomia tietokonekoodista.

Esimerkki: Algoritmi kertoa 2 numeroa ja tulostaa tulos:

javascript base64 purkaa

Vaihe 1: alkaa
Vaihe 2: Hanki tietoa syötöstä. Tässä tarvitaan 3 muuttujaa; a ja b ovat käyttäjän syöte ja c säilyttää tuloksen.
Vaihe 3: Ilmoita a, b, c muuttujat.
Vaihe 4: Ota a- ja b-muuttujien syöte käyttäjältä.
Vaihe 5: Tunne ongelma ja löydä ratkaisu operaattoreiden, tietorakenteiden ja logiikan avulla

Meidän on kerrottava a- ja b-muuttujat, jotta käytämme *-operaattoria ja annamme tuloksen c:lle.
Se on c <- a * b

supw

Vaihe 6: Tarkista, kuinka tuloste annetaan, tässä meidän on tulostettava tulos. Joten kirjoita print c
Vaihe 7: Loppu

Esimerkki 1: Kirjoita algoritmi löytääksesi maksimi kaikista taulukossa olevista elementeistä.
Noudata alla olevaa algoritmia:

Vaihe 1: Käynnistä Ohjelma
Vaihe 2: Määritä muuttuja max taulukon ensimmäisen alkion arvolla.
Vaihe 3: Vertaa max muihin elementteihin silmukan avulla.
Vaihe 4: Jos max Vaihe 5: Jos mitään elementtiä ei ole jäljellä, palauta tai tulosta max. Muussa tapauksessa siirry vaiheeseen 3.
Vaihe 6: Ratkaisun loppu

Esimerkki 2: Kirjoita algoritmi kolmen kohteen keskiarvon löytämiseksi.
Noudata alla olevaa algoritmia:

Vaihe 1: Käynnistä Ohjelma
Vaihe 2: Ilmoita ja lue 3 aihe, sanotaanpa S1, S2, S3
Vaihe 3: Laske kaikkien kolmen aihearvon summa ja tallenna tulos Sum-muuttujaan (Summa = S1+S2+S3)
Vaihe 4: Jaa summa kolmella ja määritä se keskimääräiseen muuttujaan. (Keskiarvo = summa/3)
Vaihe 5: Tulosta arvo 3 aiheen keskiarvo
Vaihe 6: Ratkaisun loppu

Tiedä algoritmin monimutkaisuudesta:

Algoritmien monimutkaisuus tarkoittaa resurssien määrää (kuten aikaa tai muistia), joka tarvitaan ongelman ratkaisemiseen tai tehtävän suorittamiseen. Yleisin monimutkaisuuden mitta on aikamonimutkaisuus, joka tarkoittaa aikaa, jonka algoritmi kestää tuloksen tuottamiseen syötteen koon funktiona. Muistin monimutkaisuus viittaa algoritmin käyttämän muistin määrään. Algoritmisuunnittelijat pyrkivät kehittämään algoritmeja, joilla on mahdollisimman pieni aika- ja muistimonimutkaisuus, koska tämä tekee niistä tehokkaampia ja skaalautuvampia.

Algoritmin monimutkaisuus on funktio, joka kuvaa algoritmin tehokkuutta sen datamäärän suhteen, jonka algoritmin on käsiteltävä.

Yleensä tämän funktion toimialueella ja alueella on luonnolliset yksiköt.

Algoritmi analysoidaan käyttämällä Time Complexity- ja Space Complexity -toimintoja. Tehokkaan algoritmin kirjoittaminen auttaa kuluttamaan mahdollisimman vähän aikaa logiikan käsittelyyn. Algoritmille A se arvioidaan kahden koon n syötteen parametrin perusteella:

  • Aika monimutkaisuus: Aika, jonka algoritmi vie ongelman ratkaisemiseen. Se mitataan laskemalla silmukoiden iteraatio, vertailujen lukumäärä jne.
  • Aikamonimutkaisuus on funktio, joka kuvaa aikaa, jonka algoritmi vie algoritmiin syöttämänä määränä.
  • Aika voi tarkoittaa suoritettujen muistin hakujen määrää, kokonaislukujen vertailujen määrää, kuinka monta kertaa jokin sisäsilmukka suoritetaan, tai jotain muuta luonnollista yksikköä, joka liittyy algoritmin reaaliaikaan.
  • Tilan monimutkaisuus: Algoritmin käyttämä tila ongelman ratkaisemiseksi. Se sisältää tarvittavien syöttömuuttujien käyttämän tilan ja ylimääräisen tilan (lukuun ottamatta syötteiden viemää tilaa), jota algoritmi käyttää. Jos esimerkiksi käytämme hash-taulukkoa (eräänlainen tietorakenne), tarvitsemme taulukon arvojen tallentamiseen
  • tämä on ylimääräinen varattu tila, joten se lasketaan algoritmin tilan monimutkaisuuteen. Tämä lisätila tunnetaan nimellä Auxiliary Space.
  • Tilan monimutkaisuus on funktio, joka kuvaa algoritmin käyttämän muistin määrän (tilan) algoritmiin syötetyn määrän perusteella.
  • Tilan monimutkaisuus jätetään joskus huomiotta, koska käytetty tila on minimaalinen ja/tai ilmeinen, mutta joskus siitä tulee ajan myötä ongelma.

.Toimintojen ajallinen monimutkaisuus:

  • Tietorakenteen valinnan tulee perustua suoritettavien toimintojen aikamonimutkaisuuteen.
  • Aikamonimutkaisuus määritellään sen mukaan, kuinka monta kertaa tietyn algoritmin suorittaminen kestää syötteen pituuden perusteella.
  • Algoritmin aikamonimutkaisuus on aika, joka kuluu kunkin lauseen suorittamiseen. Se riippuu suuresti käsiteltyjen tietojen koosta.
  • Jos esimerkiksi sinun on tehtävä hakuja usein, sinun tulee käyttää binaarihakupuuta.

. Toimintojen monimutkaisuus:

  • Tietorakenteen valinnan tulee perustua suoritettavien toimintojen monimutkaisuuteen.
  • Ohjelman suorittamiseen käyttämän muistin määrää edustaa sen tilan monimutkaisuus.
  • Koska ohjelma vaatii muistia syötetietojen ja ajallisten arvojen tallentamiseen suorituksen aikana, tilan monimutkaisuus on apu- ja syöttötilaa.
  • Jos esimerkiksi haluat tallentaa paljon dataa, sinun tulee käyttää taulukkoa.

monimutkaisissa tapauksissa:

Algoritmeissa on kaksi yleisesti tutkittua monimutkaisuutta:

1. Paras tapauksen monimutkaisuus: Algoritmin paras skenaario on skenaario, jossa algoritmi suorittaa mahdollisimman vähän työtä (esim. vie lyhimmän ajan, käyttää vähiten muistia jne.).

2. Pahimman tapauksen monimutkaisuus: Algoritmin pahin skenaario on skenaario, jossa algoritmi suorittaa suurimman määrän työtä (esim. vie pisimmän aikaa, käyttää eniten muistia jne.).

Algoritmin monimutkaisuutta analysoitaessa on usein informatiivisempaa tutkia pahimman mahdollisen skenaario, koska se antaa taatun ylärajan algoritmin suorituskyvylle. Parhaan tapauksen skenaarioanalyysi suoritetaan joskus, mutta se on yleensä vähemmän tärkeä, koska se tarjoaa alarajan, jonka saavuttaminen on usein triviaalia.

Algoritmien edut

  • Helppo ymmärtää: Koska se on vaiheittainen esitys tietyn ongelman ratkaisusta, se on helppo ymmärtää.
  • Kielestä riippumaton: Se ei ole riippuvainen mistään ohjelmointikielestä, joten sen voi helposti ymmärtää kuka tahansa.
  • Vianetsintä / Virheetsintä: Jokainen vaihe on itsenäinen / kulkusuuntainen, joten virhe on helppo havaita ja korjata.
  • Alaongelmat: Se on kirjoitettu vuona, joten ohjelmoija voi nyt jakaa tehtävät, mikä helpottaa niiden koodaamista.

Algoritmien haitat

  • Tehokkaiden algoritmien luominen on aikaa vievää ja vaatii hyviä loogisia taitoja.
  • Ikävä näyttää haaroittumista ja silmukoita algoritmeissa.