poprawa zad2
This commit is contained in:
parent
0005f531f9
commit
46dc61e655
@ -3,15 +3,15 @@
|
|||||||
<sprawozdanie przedmiot="Algorytmy rozproszone" temat="A">
|
<sprawozdanie przedmiot="Algorytmy rozproszone" temat="A">
|
||||||
<imie_nazwisko>Jakub Adamski</imie_nazwisko>
|
<imie_nazwisko>Jakub Adamski</imie_nazwisko>
|
||||||
<nr_indeksu>444341</nr_indeksu>
|
<nr_indeksu>444341</nr_indeksu>
|
||||||
<liczba_pkt>9</liczba_pkt>
|
<liczba_pkt>10.5</liczba_pkt>
|
||||||
<zadanie nr="0.1" pkt="0.5"></zadanie>
|
<zadanie nr="0.1" pkt="0.5"></zadanie>
|
||||||
<zadanie nr="0.2" pkt="0.5"></zadanie>
|
<zadanie nr="0.2" pkt="0.5"></zadanie>
|
||||||
<zadanie nr="1" pkt="1"></zadanie>
|
<zadanie nr="1" pkt="1"></zadanie>
|
||||||
<zadanie nr="1a" pkt="1"></zadanie>
|
<zadanie nr="1a" pkt="1"></zadanie>
|
||||||
<zadanie nr="1b" pkt="0.5"></zadanie>
|
<zadanie nr="1b" pkt="0.5"></zadanie>
|
||||||
<zadanie nr="2" pkt="1"></zadanie>
|
<zadanie nr="2" pkt="1.5"></zadanie>
|
||||||
<zadanie nr="0.3" pkt="0.5"></zadanie>
|
<zadanie nr="0.3" pkt="0.5"></zadanie>
|
||||||
<zadanie nr="3" pkt="1"></zadanie>
|
<zadanie nr="3" pkt="2"></zadanie>
|
||||||
<zadanie nr="5" pkt="1"></zadanie>
|
<zadanie nr="5" pkt="1"></zadanie>
|
||||||
<zadanie nr="5a" pkt="1"></zadanie>
|
<zadanie nr="5a" pkt="1"></zadanie>
|
||||||
<zadanie nr="8" pkt="1"></zadanie>
|
<zadanie nr="8" pkt="1"></zadanie>
|
||||||
@ -406,12 +406,14 @@ id: 4: lider: 1, kom0: , kom1:
|
|||||||
Zadanie 1b -------------------------------------
|
Zadanie 1b -------------------------------------
|
||||||
Wybór lidera, więcej niz 1 lider.
|
Wybór lidera, więcej niz 1 lider.
|
||||||
Dodatkowy warunek na istnienie lidera, lider pośredni.
|
Dodatkowy warunek na istnienie lidera, lider pośredni.
|
||||||
|
Nie udało mi się zrobić tego zadania w 100%
|
||||||
|
|
||||||
/// kod
|
/// kod
|
||||||
|
#inicjalizacja
|
||||||
load ./q3.so
|
load ./q3.so
|
||||||
|
|
||||||
source symul_lib.tcl;
|
source symul_lib.tcl;
|
||||||
|
|
||||||
|
#wierzchołki
|
||||||
set liczbaWierz 5
|
set liczbaWierz 5
|
||||||
set sasiedzi(0) {4 1}
|
set sasiedzi(0) {4 1}
|
||||||
set sasiedzi(1) {0 2}
|
set sasiedzi(1) {0 2}
|
||||||
@ -488,27 +490,24 @@ id: 4, lider: 0, 0
|
|||||||
|
|
||||||
Zadanie 2 -------------------------------------
|
Zadanie 2 -------------------------------------
|
||||||
8-kolorowanie wierzchołkowe drzewa ukorzenionego.
|
8-kolorowanie wierzchołkowe drzewa ukorzenionego.
|
||||||
Mam problem z finalnym algorytmu.
|
|
||||||
|
|
||||||
|
|
||||||
/// kod
|
/// kod
|
||||||
load ./q3.so
|
|
||||||
|
|
||||||
|
#inicjalizacja
|
||||||
|
load ./q3.so
|
||||||
source symul_lib.tcl;
|
source symul_lib.tcl;
|
||||||
|
|
||||||
# tworzę graf, drzewo
|
# drzewo ukorzenione
|
||||||
|
set liczbaWierz 7
|
||||||
set liczbaWierz 9
|
set sasiedzi(0) {0 1 2}
|
||||||
set sasiedzi(0) {1 2 3}
|
set sasiedzi(1) {0 3 4}
|
||||||
set sasiedzi(1) {0}
|
set sasiedzi(2) {0 5}
|
||||||
set sasiedzi(2) {0 4 5 6}
|
set sasiedzi(3) {1}
|
||||||
set sasiedzi(3) {0}
|
set sasiedzi(4) {1 6}
|
||||||
set sasiedzi(4) {2}
|
set sasiedzi(5) {2}
|
||||||
set sasiedzi(5) {2 7 8}
|
set sasiedzi(6) {4}
|
||||||
set sasiedzi(6) {2}
|
|
||||||
set sasiedzi(7) {6}
|
|
||||||
set sasiedzi(8) {6}
|
|
||||||
|
|
||||||
|
#przydatny kod do obsługi bitów
|
||||||
set obslugaBitow {
|
set obslugaBitow {
|
||||||
proc bity x { # postac binarna liczby
|
proc bity x { # postac binarna liczby
|
||||||
usun0 [binary scan [binary format I $x] B* x; set x]
|
usun0 [binary scan [binary format I $x] B* x; set x]
|
||||||
@ -556,27 +555,64 @@ set obslugaBitow {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
fiber create $liczbaWierz {
|
fiber create $liczbaWierz {
|
||||||
set c $id;
|
|
||||||
wyslij 0 c;
|
#zmienne
|
||||||
|
set new 0
|
||||||
|
set wielkosc 50
|
||||||
|
set kolor_pierwszy [wyrownaj $wielkosc [bity $id_los]]
|
||||||
|
set kolor_drugi 0
|
||||||
|
set b 0
|
||||||
|
set por 0
|
||||||
|
set c 0
|
||||||
|
|
||||||
|
for {set i 1} {$i < $stopien} {incr i} {wyslij $i $kolor_pierwszy}
|
||||||
fiber yield;
|
fiber yield;
|
||||||
while {$run} {
|
|
||||||
if {$kom(0)!=kom(1)} {
|
#główna pętla
|
||||||
set c [expr kom(0) + kom(1)]; # pozycja bitu
|
while {$run} {
|
||||||
set bity [expr c * 2]; # razy 2
|
#warunek 1
|
||||||
set lk c; # liczba bitów
|
if {$kom(0)!=""} {
|
||||||
if{c < 3}{
|
|
||||||
wyslij 1 c;
|
set kolor_drugi $kom(0)
|
||||||
}
|
set por [porownanieC $kolor_pierwszy $kolor_drugi]
|
||||||
|
|
||||||
|
set c [lindex $por 1]
|
||||||
|
set b [lindex $por 0]
|
||||||
|
|
||||||
|
set nowy [wyrownaj $wielkosc "[bity $b]$c"]
|
||||||
|
set wielkosc [expr {int(ceil(log($wielkosc)/log(2)) + 1)}]
|
||||||
|
set kolor_pierwszy $nowy
|
||||||
|
for {set i 1} {$i < $stopien} {incr i} {wyslij $i $kolor_pierwszy}
|
||||||
|
|
||||||
|
}
|
||||||
|
if { $id == 0 } {
|
||||||
|
|
||||||
|
set kolor_drugi [wyrownaj $wielkosc [bity 0]]
|
||||||
|
set por [porownanieC $kolor_pierwszy $kolor_drugi]
|
||||||
|
|
||||||
|
set c [lindex $por 1]
|
||||||
|
set b [lindex $por 0]
|
||||||
|
|
||||||
|
set wielkosc [expr {int(ceil(log($wielkosc)/log(2)) +1)}]
|
||||||
|
set nowy [wyrownaj $wielkosc "[bity $b]$c"]
|
||||||
|
set kolor_pierwszy $nowy
|
||||||
|
for {set i 1} {$i < $stopien} {incr i} {wyslij $i $kolor_pierwszy}
|
||||||
|
|
||||||
}
|
}
|
||||||
fiber yield;
|
fiber yield;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fiber_iterate $obslugaBitow
|
||||||
|
|
||||||
Inicjalizacja;
|
Inicjalizacja;
|
||||||
|
|
||||||
proc wizualizacja {} {
|
proc wizualizacja {} {
|
||||||
fiber_iterate {_puts "id: $id, c: $c, $kom(0)"}
|
fiber_iterate {_puts "id: $id, kolor: $kolor_pierwszy"}
|
||||||
}
|
}
|
||||||
|
|
||||||
fiber yield; runda; wizualizacja
|
fiber yield; runda; wizualizacja
|
||||||
@ -584,35 +620,45 @@ fiber yield; runda; wizualizacja
|
|||||||
|
|
||||||
|
|
||||||
/// wydruk
|
/// wydruk
|
||||||
id: 0, c: 0, c
|
id: 0, kolor: 00000000000000000000000000000000000000001100010010
|
||||||
id: 1, c: 1, c
|
id: 1, kolor: 00000000000000000000000000000000000000000010101001
|
||||||
id: 2, c: 2,
|
id: 2, kolor: 00000000000000000000000000000000000000001101011010
|
||||||
id: 3, c: 3,
|
id: 3, kolor: 00000000000000000000000000000000000000000100001010
|
||||||
id: 4, c: 4,
|
id: 4, kolor: 00000000000000000000000000000000000000000010111010
|
||||||
id: 5, c: 5,
|
id: 5, kolor: 00000000000000000000000000000000000000001010100000
|
||||||
id: 6, c: 6,
|
id: 6, kolor: 00000000000000000000000000000000000000001111011000
|
||||||
id: 7, c: 7,
|
|
||||||
id: 8, c: 8,
|
|
||||||
|
|
||||||
id: 0, c: 0,
|
id: 0, kolor: 0000011
|
||||||
id: 1, c: 1,
|
id: 1, kolor: 00000000000000000000000000000000000000000000000001
|
||||||
id: 2, c: 2,
|
id: 2, kolor: 00000000000000000000000000000000000000000000000111
|
||||||
id: 3, c: 3,
|
id: 3, kolor: 00000000000000000000000000000000000000000000000000
|
||||||
id: 4, c: 4,
|
id: 4, kolor: 00000000000000000000000000000000000000000000000000
|
||||||
id: 5, c: 5,
|
id: 5, kolor: 00000000000000000000000000000000000000000000000010
|
||||||
id: 6, c: 6,
|
id: 6, kolor: 00000000000000000000000000000000000000000000000010
|
||||||
id: 7, c: 7,
|
|
||||||
id: 8, c: 8,
|
|
||||||
|
|
||||||
id: 0, c: 0,
|
id: 0, kolor: 0001
|
||||||
id: 1, c: 1,
|
id: 1, kolor: 0000010
|
||||||
id: 2, c: 2,
|
id: 2, kolor: 0000101
|
||||||
id: 3, c: 3,
|
id: 3, kolor: 0000000
|
||||||
id: 4, c: 4,
|
id: 4, kolor: 0000000
|
||||||
id: 5, c: 5,
|
id: 5, kolor: 0000000
|
||||||
id: 6, c: 6,
|
id: 6, kolor: 0000011
|
||||||
id: 7, c: 7,
|
|
||||||
id: 8, c: 8,
|
id: 0, kolor: 001
|
||||||
|
id: 1, kolor: 0000
|
||||||
|
id: 2, kolor: 0101
|
||||||
|
id: 3, kolor: 0010
|
||||||
|
id: 4, kolor: 0010
|
||||||
|
id: 5, kolor: 0000
|
||||||
|
id: 6, kolor: 0001
|
||||||
|
|
||||||
|
id: 0, kolor: 001
|
||||||
|
id: 1, kolor: 000
|
||||||
|
id: 2, kolor: 101
|
||||||
|
id: 3, kolor: 011
|
||||||
|
id: 4, kolor: 011
|
||||||
|
id: 5, kolor: 000
|
||||||
|
id: 6, kolor: 001
|
||||||
/// koniec wydruku
|
/// koniec wydruku
|
||||||
|
|
||||||
|
|
||||||
@ -670,7 +716,7 @@ proc tc_pol {id pol} {
|
|||||||
|
|
||||||
Zadanie 3 -------------------------------------
|
Zadanie 3 -------------------------------------
|
||||||
Algorytm asynchroniczny wyboru lidera, uzywający O(n logn) komunikatów, dla ringu zorientowanego.
|
Algorytm asynchroniczny wyboru lidera, uzywający O(n logn) komunikatów, dla ringu zorientowanego.
|
||||||
Nie udało mi się wykonać zadania, załączam częściowo rozwiązane.
|
Nie udało mi się wykonać zadania, załączam rozwiązane w połowie.
|
||||||
|
|
||||||
/// kod
|
/// kod
|
||||||
|
|
||||||
|
124
TEMAT_A/zad2.tcl
Normal file
124
TEMAT_A/zad2.tcl
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
|
||||||
|
#inicjalizacja
|
||||||
|
load ./q3.so
|
||||||
|
source symul_lib.tcl;
|
||||||
|
|
||||||
|
# drzewo ukorzenione
|
||||||
|
set liczbaWierz 7
|
||||||
|
set sasiedzi(0) {0 1 2}
|
||||||
|
set sasiedzi(1) {0 3 4}
|
||||||
|
set sasiedzi(2) {0 5}
|
||||||
|
set sasiedzi(3) {1}
|
||||||
|
set sasiedzi(4) {1 6}
|
||||||
|
set sasiedzi(5) {2}
|
||||||
|
set sasiedzi(6) {4}
|
||||||
|
|
||||||
|
#przydatny kod do obsługi bitów
|
||||||
|
set obslugaBitow {
|
||||||
|
proc bity x { # postac binarna liczby
|
||||||
|
usun0 [binary scan [binary format I $x] B* x; set x]
|
||||||
|
}
|
||||||
|
proc usun0 x { # usuwa zera poczatkowe z repr bin liczby
|
||||||
|
set x [string trimleft $x 0]
|
||||||
|
if {$x==""} {set x 0}
|
||||||
|
set x
|
||||||
|
}
|
||||||
|
proc porownanieC {cv cu} { # porownuje 2 kolory, zwraca indeks oraz 2 bity...
|
||||||
|
set dlcu [string len $cu]
|
||||||
|
set dlcv [string len $cv]
|
||||||
|
if {$dlcu<$dlcv} {
|
||||||
|
set cu "[string repeat 0 [expr {$dlcv-$dlcu}]]$cu"
|
||||||
|
}
|
||||||
|
if {$dlcu>$dlcv} {
|
||||||
|
set cv "[string repeat 0 [expr {$dlcu-$dlcv}]]$cv"
|
||||||
|
}
|
||||||
|
set dl [string len $cu]
|
||||||
|
iterate i $dl {
|
||||||
|
set i1 [expr {$dl-$i-1}]
|
||||||
|
# KONIECZNIE trzeba numerowac bity od prawej gdyz
|
||||||
|
# dopisuje sie 0 z lewej i wtedy indeksy by sie zmienialy!
|
||||||
|
set bu [string index $cu $i1]
|
||||||
|
set bv [string index $cv $i1]
|
||||||
|
if {$bu != $bv} {return "$i $bv $bu"}
|
||||||
|
}
|
||||||
|
return {-1 ? ?}
|
||||||
|
}
|
||||||
|
proc wyrownaj {L x} { # dodaje 0 z lewej do L-bitow
|
||||||
|
set dl [string len $x]
|
||||||
|
if {$dl>$L} {error "wyrownaj"}
|
||||||
|
return "[string repeat "0" [expr {$L-$dl}]]$x"
|
||||||
|
}
|
||||||
|
proc bin2dec x { # do 32-bitow
|
||||||
|
binary scan [binary form B* [wyrownaj 32 $x]] I y
|
||||||
|
set y
|
||||||
|
}
|
||||||
|
proc iterate {zm liIter kod} { # wygodna petla
|
||||||
|
upvar $zm i
|
||||||
|
for {set i 0} {$i<$liIter} {incr i} {
|
||||||
|
set e [catch {uplevel $kod} x]
|
||||||
|
if {$e!=0} {return -code $e $x}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fiber create $liczbaWierz {
|
||||||
|
|
||||||
|
#zmienne
|
||||||
|
set new 0
|
||||||
|
set wielkosc 50
|
||||||
|
set kolor_pierwszy [wyrownaj $wielkosc [bity $id_los]]
|
||||||
|
set kolor_drugi 0
|
||||||
|
set b 0
|
||||||
|
set por 0
|
||||||
|
set c 0
|
||||||
|
|
||||||
|
for {set i 1} {$i < $stopien} {incr i} {wyslij $i $kolor_pierwszy}
|
||||||
|
fiber yield;
|
||||||
|
|
||||||
|
#główna pętla
|
||||||
|
while {$run} {
|
||||||
|
#warunek 1
|
||||||
|
if {$kom(0)!=""} {
|
||||||
|
|
||||||
|
set kolor_drugi $kom(0)
|
||||||
|
set por [porownanieC $kolor_pierwszy $kolor_drugi]
|
||||||
|
|
||||||
|
set c [lindex $por 1]
|
||||||
|
set b [lindex $por 0]
|
||||||
|
|
||||||
|
set nowy [wyrownaj $wielkosc "[bity $b]$c"]
|
||||||
|
set wielkosc [expr {int(ceil(log($wielkosc)/log(2)) + 1)}]
|
||||||
|
set kolor_pierwszy $nowy
|
||||||
|
for {set i 1} {$i < $stopien} {incr i} {wyslij $i $kolor_pierwszy}
|
||||||
|
|
||||||
|
}
|
||||||
|
if { $id == 0 } {
|
||||||
|
|
||||||
|
set kolor_drugi [wyrownaj $wielkosc [bity 0]]
|
||||||
|
set por [porownanieC $kolor_pierwszy $kolor_drugi]
|
||||||
|
|
||||||
|
set c [lindex $por 1]
|
||||||
|
set b [lindex $por 0]
|
||||||
|
|
||||||
|
set wielkosc [expr {int(ceil(log($wielkosc)/log(2)) +1)}]
|
||||||
|
set nowy [wyrownaj $wielkosc "[bity $b]$c"]
|
||||||
|
set kolor_pierwszy $nowy
|
||||||
|
for {set i 1} {$i < $stopien} {incr i} {wyslij $i $kolor_pierwszy}
|
||||||
|
|
||||||
|
}
|
||||||
|
fiber yield;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fiber_iterate $obslugaBitow
|
||||||
|
|
||||||
|
Inicjalizacja;
|
||||||
|
|
||||||
|
proc wizualizacja {} {
|
||||||
|
fiber_iterate {_puts "id: $id, kolor: $kolor_pierwszy"}
|
||||||
|
}
|
||||||
|
|
||||||
|
fiber yield; runda; wizualizacja
|
Loading…
Reference in New Issue
Block a user