GithubHelp home page GithubHelp logo

avl-puu's Introduction

AVL-Puu

Tietorakenteet ja algoritmit kurssin harjoitustyö

Tarkoitus

Tämän harjoituksen tarkoituksena oli tehdä itsestään painottuva binäärinen AVL-puu. AVL-puu on tyypiltään erittäin tehokas tietorakenne ja siihen arvojen lisääminen sekä hakuoperaatiot kestävät huonoimmillaan logaritmisen ajan.

Monet verkosta löytyvät AVL-algoritmit ovat luonteeltaan pääsäntöisesti rekursiivisia. Päätin kuitenkin pyrkiä omassa työssäni pitämään rekursiivisuuden minimissään, koska mielestäni lähes kaikki ratkaisut olivat erittäin vaikeasti ymmärrettävissä. Tässä työssä keskityin erityisesti ratkaisun helppolukuisuuteen, mutta algoritmista tuli myös kohtalaisen tehokas.

Kääntäminen

Varsinainen AVL-puu ohjelma löytyy src-kansiosta. Ohjelman pitäisi kääntyä suoraan make komennon avulla harjoitustyo-nimiseen tiedostoon, joka on suoraan ajettavissa.

Käyttö

Ohjelmaa voi käyttää sellaisenaan komennolla ./harjoitustyo tai sitten sille voi antaa ensimmäisenä argumenttina tiedoston nimen. Tiedostosta luetaan avaimet suoraan ohjelman ylläpitämään puuhun ennen päävalikon näyttämistä. Tässä repositoriossa on avaimet.txt tiedosto, jota voi käyttää testaamiseen. Tiedoston kanssa ohjelma voidaan ajaa esim. näin: ./harjoitustyo avaimet.txt. Toisena argumenttina ohjelmalle voi syöttää argumentin t, jolloin ohjelma luo puurakenteen ja poistuu sen jälkeen välittömästi. Ohjelma on valikkopohjainen ja jokaisen valinnan pitäisi olla itsestään selviä.

Tiedoston rakenne

Ohjelmalle voi syöttää tiedostoja, jotka sisältävät solmujen avaimia. Tiedoston tulisi sisältää kokonaislukuina esitettyjä avaimia erotettuna rivinvaihdolla.

Apuohjelmat

Varsinaisen ohjelman lisäksi tästä repositoriosta löytyy kaksi apuohjelmaa. Ensimmäinen apuohjelma on nimeltään arvoja.py, jonka avulla voi generoida testaus dataa. Toinen apuohjelma on nimeltään testaa_nopeuksia.sh, jonka avulla voi testata ohjelman performanssia automaattisesti.

arvoja.py:n käyttö

arvoja.py luo random.txt nimisen tiedoston ajamisen jälkeen. Ohjelman voi ajaa esimerkiksi komennolla python3 ./arvoja.py 100, jolloin ohjelma luo 100 kappaletta 1-1000 välillä olevia lukuja random.txt tiedostoon. Kyseisen tiedoston voi avata suoraan varsinaisella AVL-puu ohjelmalla.

testaa_nopeuksia.sh:n käyttö

testaa_nopeuksia.sh skripti ajaa performanssi testauksen ohjelmalle oletuksena noin alkioilla (1-100 000) 1 000 alkion välein. Skripti ei odota parametreja vaan sen voi ajaa suoraan komennolla ./testaa_nopeuksia.sh. Valmistuttuaan skripti tallettaa tulokset Tulokset kansioon csv tiedostoon, jossa ensimmäisellä sarakkeella on lisättyjen solmujen määrä ja toisella sarakkeella on lisäilyyn kulunut aika.

Analyysi.m

Analyysi.m on pieni Matlab skripti, jolla voi piirtää kuvaajan testaa_nopeuksia.sh:n tuotoksista. Skriptin voi avata Matlabissa ja yrittää ajaa sen samassa kansiossa kuin csv-tiedostonkin, jolloin skriptin pitäisi piirtää kuvaaja.

Lisättäviä ominaisuuksia

  • Alkioiden poisto
  • Tehokkaampi muistin varaus (ei aina uutta mallocia)
  • Parempi tulostus
  • Lisää selkeyttä painojen päivittämiseen kiertojen yhteydessä
  • Parempi Makefile

avl-puu's People

Contributors

softgitron avatar

Watchers

 avatar  avatar

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.