Linkitetty lista

Onkos linkitetty lista hitaampa kuin pelkkä taulukointi?

Vai onko joku muu nopeempa kuin taulukointi?



Ohjelmassa tärkeintä on nopeus. Kieli C
8743
Äänestä

Muut lukivat myös

Vastaukset 8

Vanhimmat

Satunnaisen alkion ottaminen on listassa hitaampaa kuin taulukossa. Jos taas taulukkoon pitää usein lisätä ja poistaa tietoa, ja vieläpä eri kohdista, vie se enemmän aikaa, kuin listan käsittely.

Se siis riippuu käytöstä. Tee kuitenkin ensin toimiva ohjelma, ja testaa sitten auttaako toinen tietorakennen nopeusongelmiin, jos niitä tulee. STL:n template-luokat ovat hyvä apuväline: voit vaihtaa sellaisen toiseen, jos hitaus vaivaa, tai vaikka korvata omalla optimoidulla koodilla, jos tarvitse juuri tietynlaista rakennetta.

No, jos tiedät varmasti jo, miten rakennetta käytät, voit ylläolevasta päätellä kumpi on sinulla nopeampi. Muutoin suosittelen käyttämään STL:n vector-luokkaa, ja testaamaan myöhemmin, auttaako list-luokka mitään.

Äänestä

jos voit käyttää taulukkoa. Tärkein kysymys on se, voitko käyttää taulukkoa vai pitääkö käyttää listaa.

Äänestä
  • Kiitoksia molemmille. Voi täs jutus käyttää taulukkoa joten käytän sitä. Viel hakuses nää jutut joten ei mitään tietoa mikä nopein keino tallentaa tietoa ohjelmaan.

    Äänestä

on lähes aina hitaampi kuin taulukko.

Taulukon etu on kun tiedät missä tietty data sijaitsee (A[2,3]). Silloin seuraa lyhyt laskentaoperaatio, 2 kertaa rivipituus 3 (taulukot ovat muistissa vektoreina, eli pöyköinä.

Jos usein joudut lisäämään tai poistamaan data taulukosta, linkitetty lista on parempi. Voit lisätä rivejä mihen kohtaan listaa tahansa(ilman että joudut kopioimaan valtaavia määriä data paikasta toiseen).

Jos joudut etsimään data tietorakenteesta puurakenne (esim. binary tree) on tehokkuudessa potennssiluokka nopeampi kuin taulukko.

Jos data ei muutu kovin usein, hash-table rakenne on vielä tehokkaampi kuin puurakenne.

Tietokannat käyttävät pääasiassa näitä kaksi viimeksi mainittuja.

Jos yleisesti voisi sanoa että taulukko on parempi kuin joku tietorakenne, tuskin näitä tietorakenteita olisi keksitty.

Jossain tapauksissa taulukko on oikea vaihtoehto, toisissa monimutkainen tietorakenne. Kaikki riippuu siitä mitä olet tekemässä.

Jos käytät C tai C ei oikeastaan vaikuta asiaan: Ne implementoivat tietorakenteet lähes samalla tavalla.

Äänestä
  • "Jos käytät C tai C ei oikeastaan vaikuta asiaan: Ne implementoivat tietorakenteet lähes samalla tavalla."

    Puhutko vieläkin taulukosta ja linkitetystä listasta? Miten ne implementoidaan samalla tavalla? Jos teen itse linkitetyn listan, niin mistä kääntäjä tietää miten se kannattaa toteuttaa?

    Äänestä

  • ceisti kirjoitti:

    "Jos käytät C tai C ei oikeastaan vaikuta asiaan: Ne implementoivat tietorakenteet lähes samalla tavalla."

    Puhutko vieläkin taulukosta ja linkitetystä listasta? Miten ne implementoidaan samalla tavalla? Jos teen itse linkitetyn listan, niin mistä kääntäjä tietää miten se kannattaa toteuttaa?

    eli taulukko on molempien kielien sisäänrakennettu ominaisuus.

    Tietorakenteet (linkitetty lista, puurakenteet, hash-taulukot jne) eivät kuulu itse kielen syntaksiin. Voi olla että löydät jonkun kirjaston jossa on tuki jollekin tietorakenteelle, mutta se ei ole osa kieltä. C-kielessä on muistaakseni 23 avainsanaa (for, if, while, switch, int, float, char, return jne), kaikki muut ovat kirjastofunktioita tai makroja.

    "Jos teen itse linkitetyn listan, niin mistä kääntäjä tietää miten se kannattaa toteuttaa?"

    Jos syötät saman linkitetyn listan lähdekoodi C tai C koodi C- ja C kääntäjälle, ne molemmat tuottavat todennäköisesti aivan samaa konekielistä (.bin) koodia. (pieniä eroja voi olla optimoinnissa jne. mutta nopeudessa ei).

    Äänestä

  • muuttuja kirjoitti:

    eli taulukko on molempien kielien sisäänrakennettu ominaisuus.

    Tietorakenteet (linkitetty lista, puurakenteet, hash-taulukot jne) eivät kuulu itse kielen syntaksiin. Voi olla että löydät jonkun kirjaston jossa on tuki jollekin tietorakenteelle, mutta se ei ole osa kieltä. C-kielessä on muistaakseni 23 avainsanaa (for, if, while, switch, int, float, char, return jne), kaikki muut ovat kirjastofunktioita tai makroja.

    "Jos teen itse linkitetyn listan, niin mistä kääntäjä tietää miten se kannattaa toteuttaa?"

    Jos syötät saman linkitetyn listan lähdekoodi C tai C koodi C- ja C kääntäjälle, ne molemmat tuottavat todennäköisesti aivan samaa konekielistä (.bin) koodia. (pieniä eroja voi olla optimoinnissa jne. mutta nopeudessa ei).

    Ymmärsin tekstistä, että rakenteilla ei ole eroa keskenään, mutta kirjoittaja tarkoittikin, että samalla toteutuksella eri kielillä ei ole (juurikaan) eroa.

    Ok, näin tietenkin on.

    Äänestä

  • ceisti kirjoitti:

    Ymmärsin tekstistä, että rakenteilla ei ole eroa keskenään, mutta kirjoittaja tarkoittikin, että samalla toteutuksella eri kielillä ei ole (juurikaan) eroa.

    Ok, näin tietenkin on.

    vastausta uudestaan että sitä olisi voinnut muotoilla selkeämmin.

    Yritän parantaa tapojani (luonteelleni en voi mitään!)

    Äänestä

Kommentoi aloitusta


Qwerty-- kirjoitti:

Onkos linkitetty lista hitaampa kuin pelkkä taulukointi?

Vai onko joku muu nopeempa kuin taulukointi?



Ohjelmassa tärkeintä on nopeus. Kieli C

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu