Avtor: Žiga Ham
Mentor: izr. prof. dr. Marko Robnik-Šikonja

Problem

  • Izdelovanje vizualizacij algoritmov je zamudno in zahtevno
  • Veliko obstoječih vizualizacij, majhna ponovna uporabnost

Rešitev

  • Ogrodje za izdelavo vizualizacij
  • Modularna zasnova

Zasnova

  • Spletna stran
  • Orodje za zajemanje dogodkov
  • Javascript ogrodje za vizualizacije

Zajem dogodkov

avy('start')
list = []
for i in range(10):
  avy('step')
  list.append(i)
  avy('list.add', i)
int main() {
  AVY(start);
  std::vector<int> list;
  for (int i = 0; i < 10; i++) {
      AVY(step);
      list.push_back(i);
      AVY(list.add, P(i));
  }
}

Zajem dogodkov

Možnost izklopa

import sys

if len(sys.argv) > 1 and sys.argv[1] == 'avy':
  from avy import avy
else:
  def avy(*argv):
    pass
#ifdef EAVY
#include "avy.h"
#else
#define AVY(...)
#endif

Zajem dogodkov

Dnevnik (datoteka z dogodki)

  • Imena funkcij: string
  • Parametri: JSON
step()
list.add(0)
step()
list.add(1)
step()
list.add(2)
step()
list.add(3)
...
step()
list.add(9)

Vizualizacija

define(['m/ziga/core/playback', 'm/ziga/core/svg',
    'm/ziga/list/list', 'm/ziga/node/simple'],
    function(playback, svg, list, node) {

  var v = {};
  v.list = new list(svg, new node());

  playback.load(v);

});

Topološko urejanje

Topološko urejanje

define([...], function(...) {
  var v = {};
  var nodeStyle = new nodeSimple(), linkStyle = new linkArrow();
  v.graph = new graph(svg.add(), nodeStyle, linkStyle);
  v.list = new list(svg.add(), nodeStyle);

  playback.load(v);
});
for (int i = 0; i < n; i++) {
  AVY(graph.addNode, P(i));
}
for (int i = 0; i < m; i++) {
  scanf("%d %d", &a, &b);
  AVY(graph.addLink, P(a), P(b));
  ...
}
...
while (!vrsta.empty()) {
  int t = vrsta.top(); vrsta.pop();
  AVY(step);
  AVY(graph.delNode, P(t));
  AVY(list.add, P(t));
  ...
}

Spletna stran

  • Gostuje (tuje) vizualizacije in module
  • Ločena dela spletne strani

Sklep

  • Narejeno
    • Spletna stran
    • Orodje za zajemanje dogodkov
    • Javascript ogrodje za vizualizacije
    • Osnovni moduli in primeri vizualizacij
  • Možnosti za nadgradnjo
    • Sočasno prikazovanje vizualizacije
    • Prikazovanje kode algoritma
    • Prilagajanje velikosti zaslona
    • Možnost izvajanja programov na strežniku
    • Pohitritev nalagalnika modulov