Vinkkiä nopeampaan algoritmiin

rautalangasta

Oheinen metodi etsii kaikki mahdolliset reittivaihtoehdot mitä syötetyillä kohteiden määrällä voi olla.
[URL=http://img35.imageshack.us/i/reittimetodi.jpg/][IMG]http://img35.imageshack.us/img35/5329/reittimetodi.jpg[/IMG][/URL]

Ongelmana onkin että kyseinen metodi on surkuhupaisan hidas. Esim. 9 kohteella reittivaihtoehtoja voi olla 362 880 kpl (ja 4 ytiminen prossu saa laskea sitä about tunnin) niin olisiko jollakulla kokeneemmalla tyypillä ohjeistusta tai esimerkkiä miten tuon saisi näppärämmin selvitettämään reitit?

Lyhyesti selostettuna tuon toiminta menee näin:
sekoitetaan lista(jossa siis on kohteiden nimet), tarkistetaan löytyykö sitä taulukosta ja jollei sitä ole niin se tallennetaan sinne. Ja tätä jyllätään while loopissa niin pitkään kunnes reittivaihtoehtojen maksimimäärä tulee umpeen esim. 9 kohteella kun taulukossa on 362 880 reittiä niin lopetetaan.

laskeReittivaihtoehtojenMaara metodi palauttaa syötetyn arvon kertoman
sekotusLista sisältää kohteitten nimet

8

342

    Vastaukset 8

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • rautalangast

      Kuvan linkki meni hieman pieleen vielä niin laitan toiseen kertaan:
      http://img35.imageshack.us/i/reittimetodi.jpg/

    • foobarfoo

      Koodissasi oli virhe: rivillä 238 vertaat kahta lista-oliota toisiinsa, kun varmaan haluaisit verrata että onko näiden listojen sisältö sama ja samassa järjetyksessä.

      Nopein nopeutusidea mikä näin lauantaiaamuna lähtee on, että laitat noi kohteet map-olioon ja vertailet noita avaimia toisiinsa ja vasta lopussa tulostat reitit.

      Ilmeisesti suomi24 on blokattu imageshackin sivuilta, koska noi kuvalinkki ei toimi.

    • rautalangasta

      "Koodissasi oli virhe: rivillä 238 vertaat kahta lista-oliota toisiinsa, kun varmaan haluaisit verrata että onko näiden listojen sisältö sama ja samassa järjetyksessä."

      Testailin tuota vielä uudelleen ja kyllä se näköjään tajuaa myös tarkistaa onko listat samassa järjestyksessä.

      public static void main(String[] args) {
      List lista = new ArrayList();
      lista.add("helsinki");
      lista.add("turku");
      List lista2 = new ArrayList();
      lista2.add("turku");
      lista2.add("helsinki");
      if (lista.equals(lista2)) {
      System.out.println("ol sama");
      } else {
      System.out.println(lista " ei ollu " lista2);
      }
      }

      Mutta joo pitää kattoa miten nuo map hommelit menee ja testailla vielä sillä sitten. Tulostus oli kanssa siinä lopussa eikä while silmukan sisällä =)

      • foobarfoo

        Väärin testattu:) haluat aina testata että ohjelma toimii oikealla datalla oikein, et sitä et väärällä datalla väärin. Mut joo, ainoa tapa miten keksin rikkoa tuon oli et vaihdan turku-> Turku . Eikä tuo vertailu myöskään toiminut jos laitoin itse tekemäni luokan tuohon listiin ja en ylikirjoittanut sen luokan equals-metodia.

        public static void main(String[] args) {
        List lista = new ArrayList();
        lista.add("Turku");
        lista.add("helsinki");

        List lista2 = new ArrayList();
        lista2.add("turku");
        lista2.add("helsinki");
        if (lista.equals(lista2)) {
        System.out.println("ol sama");
        } else {
        System.out.println(lista " ei ollu " lista2);


      • rautalangasta
        foobarfoo kirjoitti:

        Väärin testattu:) haluat aina testata että ohjelma toimii oikealla datalla oikein, et sitä et väärällä datalla väärin. Mut joo, ainoa tapa miten keksin rikkoa tuon oli et vaihdan turku-> Turku . Eikä tuo vertailu myöskään toiminut jos laitoin itse tekemäni luokan tuohon listiin ja en ylikirjoittanut sen luokan equals-metodia.

        public static void main(String[] args) {
        List lista = new ArrayList();
        lista.add("Turku");
        lista.add("helsinki");

        List lista2 = new ArrayList();
        lista2.add("turku");
        lista2.add("helsinki");
        if (lista.equals(lista2)) {
        System.out.println("ol sama");
        } else {
        System.out.println(lista " ei ollu " lista2);

        Lista on pyyhkästy toisessa metodissa jo lowercaseksi niin ei pitäisi olla ongelma ja ei myöskään sisällä samaa osoitetta toistamiseen.

        Eli sinällään muuten tuo toimii oikein mutta pirun hitaasti.. kattelin suorittimen käyttöastetta samalla niin näyttäs siinä 25% kieppeillä pyörivän (vaan yhtä ydintä kuormitti) niin jostain jos sais poppaskonstin jolla pyyhältää tuutin täydeltä soppaa sille :)

        Mutta kaitpa tuota muutenkin nopeutettua saisi vaan ei aloittelijana mitään tajua. Aikamoinen sekamelska on muutnenkin kyseinen ohjelma.


    • rautalangasta

      Poistin rivit 246 ja 250 koska siinä ei tallenneta reittiä mikäli reitin ensimmäinen kohde on kauimmaisena aloituspaikasta, vaikka se pitäisi tehdä vasta kun kaikki reitit on selvillä.

      Mielelläni ottaisin vastaan lisää ehdotuksia.

      Tuohon linkkiin vielä että näyttäs toimivan kun sen kopioi suoraan osoiteriville.
      Vaikka siinä ylimääräistä säätämistä tuleekin niin arvelin koodin näyttävän selkeämmältä tuosta eclipse shotista kuin pasteta se if hässäkkä tähän :)

      • dx

        Siis en oikein käsitä mitä tuo algoritmisi oikein yrittää tehdä. Mutta jos haluat generoida kaikki mahdolliset reitit N-kaupugin välillä, kannattaa varmaan käyttää vaikka jotain noita permutaatioidengenerointimenetelmiä:

        http://www.cs.princeton.edu/~rs/talks/perms.pdf


    • hhhhggga

      Mitä pyrit loppujen lopuksi tekemään, löytämään lyhintä mahdollista reittivaihtoehtoa?

      Jos haluat lyhyimmän reitin (reittien välillä on esim joku matka ja haluat löytää mahdollisimman lyhyen matkan kulkea pisteestä a pisteeseen b), käytä jotain siihen soveltuvaa menetelmää esim. dijkstra's sortest path algorithm

      Jos taas haluat vain generoida kaikki mahdolliset yhdistelmät, oikea vastaus on jo annettu eli permutointi

      Sivuhuomautuksena tuolla prosessorin ytimien määrällä ei ole mitään väliä, ellet tee ohjelmaasi sitä ajatellen (säikeistettynä tai useampaa prosessia apuna käyttäen).

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Nyt se syksy on sitten alkanut

      Esimerkiksi tänään sataa aamusta iltaan, ja nytkin.
      Maailman menoa
      53
      1010
    2. Minä en ole koskaan

      Rakastanut ketään toista yhtä paljon kuin sinua
      Ikävä
      98
      994
    3. Tiesitkö? Jorma Uotisen EX-rakas on Helena Lindgren - Nämä ovat välit nyt: "Me ollaan..."

      Jorma Uotinen ja Helena Lindgren olivat avoliitossa v. 1982-1999. Pariskunta oli aikansa näyttävä julkkispari, missä i
      Kotimaiset julkkisjuorut
      21
      852
    4. Vähän pitää

      Kiusia ja näyttää
      Ikävä
      135
      802
    5. Anteeksi J-mies

      Anteeksi että myötävaikutin siihen että rakastuit minuun, jota et voi koskaan saada. Viimeksi kun näimme ja katselimme t
      Ikävä
      121
      776
    6. Olet nainen ollut vaikein rasti

      Eniten olet tunteitani myllännyt ja niitä kuluttanut, ja tuottanut. 🤔
      Ikävä
      52
      753
    7. Taidat olla

      Luovuttanut jo minun suhteeni osalta?
      Ikävä
      45
      656
    8. Kenen viisautta on ollut laittaa tie väärällä murskeella pilalle

      Kenen viisautta on ollut kun Siimeksen/Kylmänpurontie pantu pilalle kun on ajettu liian karkeaa mursketta. Rengasliikke
      Hyrynsalmi
      24
      644
    9. Riittääkö mahkut

      Kaivattuusi 🤭.
      Ikävä
      50
      638
    10. Minä muistan

      Minä muistan sinut nauravana. Sellaisena, joka sai tavallisenkin hetken tuntumaan vähän kevyemmältä, kuin huoneeseen ol
      Ikävä
      45
      610
    11. Mä voisin rakastua noihin tähti silmiin

      Katseesi on niin lumoava nainen💚.
      Ikävä
      19
      596
    12. Jos tullaan toisiamme vastaan, niin

      pitäiskö pysähtyä ja onnitella?
      Ikävä
      46
      578
    13. Voisiko vielä välillemme jotain kehittyä

      Vai heihei ja ei nähdä enää.
      Ikävä
      35
      560
    14. Siinä kävi mies nyt niin että tämä ämmä muuttaa ulkomaille

      Vuonojen maa kutsuu, joten ei hätää. Et kuule minusta enää. 😂 Lycka till! Ämmä riittää.
      Ikävä
      72
      558
    15. Koska Martina viettää aikaansa lapsiensa kanssa

      Äiti vaan juoksee miehen perässä Tallinnassa, Lontoossa, Turussa. Kyllä oli kätilö oikeassa, kun sanoi, että ei olisi ka
      Kotimaiset julkkisjuorut
      139
      545
    16. Kuhmolainen opettaja tuomittu vainoamisesta

      https://yle.fi/a/74-20248184 ”Kuusikymppinen kuhmolaisnainen piinasi naapureitaan lähes kahdeksan vuoden ajan. Nainen
      Kuhmo
      10
      538
    17. Ähtäri on taas TV: n ja radion ykkösuutinen

      Uusi podcast on julkaistu ja on nyt kuunneltavissa. Mot on tehnyt hyvää työtä! Mikko Savola ja kepu ei ota mitään vast
      Ähtäri
      46
      537
    18. Mitä muuta on olemassa kuin lisääntyminen

      Jos mies ei pääse lisääntymään niin mikä hänen osansa elämässä on? mitä jää jäljelle? Hän on vain muiden palvelija kok
      Sinkut
      119
      526
    19. Tilanteenne

      Onko tilanteenne tällä hetkellä hyvä?
      Ikävä
      47
      515
    20. Kerro kolme hyvää asiaa

      Kaipaamastasi ihmisestä ja lisää perään onko kaivattusi n vai m 😍
      Ikävä
      25
      512
    Aihe