Code Monkey home page Code Monkey logo

verkkoalgoritmit's People

Contributors

skajanti avatar

Watchers

 avatar

verkkoalgoritmit's Issues

Vertaisarviointi

Projekti ladattu 24.4. 22.14. Edellisen vertaisarvioinnin jälkeen projektiin ei ole tullut päivityksiä.

Koodi on kommentoitua ja pääosin selkeää. Tietorakenteita ei ole vielä toteutettu itse ja java.util -importteja on käytössä. Muuttujien nimennän tulisi olla selkeämpää, eli ei pelkkää alkukirjainta tms. Testeistä AStarTest ja equalsTest eivät mene läpi, kuten edellinen arvioija olikin jo maininnut.

Yritän tähän antaa nyt joitain pieniä huomioita, joita edellisessä melko kattavassa arvioinnissa ei ollut mainittu:

  • Timanttioperaattorin käyttö olisi suotavaa. Tällä hetkellä IDE maalailee ahkerasti koodia varoituksella "Unchecked assignment". Täällä lisätietoa: https://www.baeldung.com/java-diamond-operator
  • Solmu-luokan equals-metodin voisi kirjoitta hieman tiiviimmin, nähdäkseni kolme riviä riittää.
  • Checkstylen asetuksia voit muuttaa siten, että salli yhden rivini ehtolauseet ja loopit ilman sulkuja. Omassa projektissani toimein näin. Mielestäni luettavuus paranee ja koodi pysyy tiiviimpänä. Myös ternary-operaattori auttanee.
  • Testeissä esim. KaariTest -luokassa voisi käyttää metodeita assertSame ja assertEquals luettavuuden parantamiseksi.
  • SolmuTest -luokassa myös assertEquals käyttöön. Sitten assertTrue(!s.equals(t)) => assertFalse(s.equals(t)). Edellisessä arvioinnissa kerrottiinkin jo, miksei tuo mene läpi. Ja vielä; assertTrue(!s.equals(t)) => assertTrue(true), eli tuon voit poistaa kokonaan.

Ei nyt paljon ollut lisättävää edellisen arvioijan huomioihin. Toivottavasti näistä oli jotain hyötyä. Jaksamista projektin loppuun viemiselle!

Vertaisarviointi

Latasin projektin ZIP-tiedoston 12.4.2020 klo 12:36, joten tämä vertaisarviointi perustuu senhetkiseen GitHubissa olleeseen tilanteeseen.

Projektin koodi oli pääosin tosi selkää ja siistiä, joten sitä oli mukava lukea. Se ja selkeä luokkajako teki koodista helposti ymmärrettävän.

Oli mielenkiintoista, miten algoritmit ovat rakentuneet aina toistensa päälle alempaa hyödyntäen. Tämä vaikutti järkevältä ja hyvältä ratkaisulta, joka eliminoi tehokkaasti koodista toistoa. Mielestäni oli myös tosi hyvä, että koodi tulosti ratkaistuun reittiin liittyen paljon erilaista tietoa. Oli kiva koodin avulla vertailla algoritmien reittejä ja nopeuksia.

Koodista poimimani asiat, joihin voisi kiinnittää huomiota, ovat monet melko pieniä asioita.

Yleisinä kommentteina voisi sanoa, että itsellä tuli mieleen koodia luettaessa, että ehkä algoritmit ja tietorakenteet voisi sijoittaa kahteen alipakettiin, joista toisessa olisivat rakenteet ja toisessa algoritmit, niin rakennetta saisi vieläkin selkeämmäksi. Itse koodia voisi myös selkeyttää lisää siten, että tekisi muuttujien ja metodien nimistä kuvaavampia. Siis erityisesti useimmat metodit ovat jo selkkeästi nimettyjä, mutta esimerkiksi JumpPointin metodit yo, yv jne. voisivat olla vähän kuvaavammin nimettyjä. Monissa luokissa on myös nimetty muuttujia, kuten solmuja ja ratkaisioita, vain yhdellä kirjaimella. Hieman kuvaavampi nimi voisi nopeuttaa koodin lukua.

AStar-luokassa pisti silmään sellainen asia, että Javan metodit Math.max ja Math.min voisi varmaan tällä kurssilla korvata omilla toteutuksilla. Lisäksi luokassa oli joitain käyttämättömiä importteja, jotka voisi varmaan ottaa pois. Aika pieniä juttuja nämä. Muuten luokka oli tosi siisti, ja hyödyntää tosi hyvin Dijkstra-luokkaa, niin ei edes tule toistoa.

Myös Dijkstra-luokassa oli käyttämättömiä importteja, jotka voisi ottaa pois. Lisäksi siellä olevat Javan omat tietorakenteet IdentityHashMap ja PriorityQueue voisi korvata ehtiessä itsetehdyillä tietorakenteilla. Mutta niin varmaan oli tarkoituskin. Muuten luokka vaikuttaa minun silmiini toimivalta ja siistiltä. Algoritmin toteutus näyttää hyvältä.

JumpPoint-luokassa on kanssa tietorakenteita, joita voisi korvata omilla. Siellä näyttäisi olevan ArrayList, IdenntityHashMap ja PriorityQueue. Tässä luokassa on myös muutama metodi (yo, yv jne.) ja muuttuja (s, v), jotka voisi halutessaan nimetä selkeämmin. Tosin tietenkin kirjoittamisen kannalta lyhyet nimet ovat käteviä. Luokassa on pari melko pitkää metodia, kuten "alas", jotka voisi ehkä olla mahdollista jakaa lyhyempiin metodeihin. Pitkät metodit eivät tässä tapauksessa kuitenkaan tee koodista epäselvää, koska koodi on hyvin jäsennelty. Niinpä tämä on ehkä enemmän sellainen tyyliseikka.

Mitä ohjelman tietorakenteisiin tulee, niin minusta nekin vaikuttavat aika toimivilta. Tietenkin, jos olioita ja viittauksia olioihin haluaa vähentää, niin esimerkiksi kaari voisi olla mahdollista toteuttaa taulukon muodossa, jos vaikkapa kaaren solmujen sijaan tauluun laitettaisiinkin indeksit solmuihin, ja itse solmut löytyisivät jostain taulukosta. Tällainen olioviittausten vähentäminen saattaisi nopeuttaa algoritmien toimintaa. Verkon muuttujat kartta ja boolkartta puolestaan voitaisiin esittää yksiulotteisena nxn -mittaisena taulukkona. En tiedä auttaisiko tällainen muutos kovin paljon, mutta se saattaisi nopeuttaa joissain tilanteissa vähän. Jos on aikaa, niin Verkko-luokan ArrayListin voisi korvata omalla toteutuksella.

Main- ja KartanLataaja-luokat näyttivät nekin mielestäni hyviltä. Niistäkin ehkä tulisi mieleen se, että Mainin turhat importit voisi poistaa, ja halutessaan KartanLataajassa käytetyn ArrayListin ja esim. Stringin metodin split voisi toteuttaa itse, jos aikaa jää. Nämäkin ovat jälleen tällaisia pikkuseikkoja, koska paljon huomautettavaa ei ole, kun projekti on sen verran hyvä.

Testeistä osui silmään pari asiaa. Testejä on ehkä suhteellisen vähän. Tämä voi tosin olla osittain mielipidekysymys. Ainakin JumpPointille voisi luoda oman testiluokan ja sinne testejä. Myös muihin testiluokkiin voisi ehtiessä luoda vähän lisää testejä, niin saisi kattavammin testattua erilaisia tilanteita ja yksittäisiä metodeita. Esimerkiksi Dijkstran testiluokassa voisi testata erikseen myös lisaaKekoon-metodin toimintaa erilaisilla syötteillä, ja AStarille voisi vaikka erikseen testata pelkän oktiiliMatka-metodin toimintaa erilaisilla syötteillä.

Kun itse ajoin nykyiset testit, niin niistä kaksi (aStarTest ja algotestit.SolmuTestin equalsTest) eivät menneet läpi. aStarTest tulosti, että "Dijkstraa epätehokkaampi". Toisessa testissä puolestaan vaikuttaisi olevan ongelmana, että verrataan solmua ja booleania.

Kaiken kaikkiaan projekti vaikuttaa hyvältä ja toimii ilmeisesti niin kuin pitääkin. Se on siististi koodattu, ja sen luokkarakennikin on hyvä. Algoritmien toteutukset ovat selkeitä ja sopivat tutkittuun aiheeseen. Dijsktralla ja AStarilla kesti suhteellisen kauan laskea reittejä, mutta ne tekivät sen mitä piti, ja tietenkin pitempien reittien laskemisessa tokikin kestää. Tämä oli tosi mielenkiintoinen projekti tutkia ja arvioida, ja sen avulla oli kiva päästä vertailemaan verkkoalgoritmeja.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.