diff --git a/images/adjacency.png b/images/adjacency.png
new file mode 100644
index 0000000..213c9bf
Binary files /dev/null and b/images/adjacency.png differ
diff --git a/images/adjacency_6.png b/images/adjacency_6.png
new file mode 100644
index 0000000..8e9235f
Binary files /dev/null and b/images/adjacency_6.png differ
diff --git a/images/graf_skierowany.png b/images/graf_skierowany.png
new file mode 100644
index 0000000..e63590f
Binary files /dev/null and b/images/graf_skierowany.png differ
diff --git a/images/klastry.png b/images/klastry.png
new file mode 100644
index 0000000..0618c63
Binary files /dev/null and b/images/klastry.png differ
diff --git a/matma2nowy.ipynb b/matma2nowy.ipynb
index 8cc3b03..328d59c 100644
--- a/matma2nowy.ipynb
+++ b/matma2nowy.ipynb
@@ -18,14 +18,21 @@
"\n",
"#### Przykład jednowymiarowego spaceru losowego zaczynającego się w punkcie 0, po osi liczb całkowitych:\n",
"![r_w_1d_1](./images/random_walk_1d_1.png)\n",
+ "\n",
"Obiekt w każdym kroku może poruszać się z równym prawdopodobieństwem w dwóch kierunkach: lewo lub prawo.\n",
"W pierwszym kroku prawdopodobieństwo że obiekt znajdzie się w pozycji -1 lub 1 wynosi 1/2.\n",
+ "\n",
"![r_w_1d_2](./images/random_walk_1d_2.png)\n",
+ "\n",
"W drugim kroku obiekt może znaleźć się na pozycjach -2, 0 i 2. Prawdopodobieństwo że obiekt znajdzie się w położeniu -2 lub 2 jest równe i wynosi 1/4,\n",
"do punktu 0 obiekt może dotrzeć z punktów -1 i 1 to znaczy że prawdopowdopodobieństwa należy zsumować i wtedy 1/4 + 1/4 = 1/2.\n",
+ "\n",
"![r_w_1d_3](./images/random_walk_1d_3.png)\n",
+ "\n",
"W trzecim kroku obiekt może znaleźć się w pozycjach -3, -1, 1, 3. Prawdopodobieństwo że obiekt znajdzie się w pozycji 3 lub -3 jest równe 3/8, a pozycjach 1 lub -1 jest równe 1/8.\n",
+ "\n",
"![r_w_1d_4](./images/random_walk_1d_4.png)\n",
+ "\n",
"Łatwo zauważyć, że gdy liczba wykonanych kroków jest nieparzysta, to wszystkich możliwych pozycji w jakich może znależć się obiekt również jest nieparzysta liczba. Podobnie w przypadku parzystej liczby wykonanych kroków, ilość możliwych pozycji jest parzysta.\n",
"\n",
"#### Dwuwymiarowy spacer losowy\n",
@@ -79,7 +86,69 @@
{
"cell_type": "markdown",
"source": [
- "### Klastry\n"
+ "### Spacer losowy po grafie\n",
+ "\n",
+ "Spacer losowy po grafie skierowanym lub nieskierowanym G jest losową sekwencją wierzchołków v1, v2, . . . . , vk takich, że vi, vi+1 jest krawędzią w G.\n",
+ "\n",
+ "Zakładamy, że A jest macierzą sąsiedztwa grafu G oraz że vi jest wierzchołkiem.\n",
+ "\n",
+ "Macierz sąsiedztwa to macierz definiowana:\n",
+ "A = (ai,j) gdzie ai,j = { 1 jeśli (vi, vj) jest krawędzią w grafie G lub 0 w przeciwnym przypadku }\n",
+ "\n",
+ "Liczba spacerów o długości k, które zaczynają się w vi i kończą w vj, jest dana przez element z i-tego wiersza i j-tej kolumny w Ak. W szczególności całkowita\n",
+ "liczba spacerów o długości k, które zaczynają się w punkcie vi, jest sumą i-tego wiersza macierzy Ak, tzn. jeśli Ak = (bi,j), to liczba ta wynosi\n",
+ "bi,1 + bi,2 + ... + bi,m. Podobnie, całkowita liczba spacerów o długości k, które kończą się w vj, jest sumą j-tej kolumny macierzy Ak.\n",
+ "\n",
+ "**Twierdzenie**:\n",
+ "\n",
+ "Jeśli A jest macierzą sąsiedztwa grafu lub digrafu G o wierzchołkach {v1, ... . . vn}, to pozycja i, j\n",
+ "w Ak jest liczbą przejść o długości k od vi do vj.\n",
+ "\n",
+ "**Dowód na podstawie k**:\n",
+ "\n",
+ "Widać, że przypadek, gdy k = 1, jest prawdziwy.\n",
+ "\n",
+ "Załóżmy zatem, że wynik jest prawdziwy dla dowolnego k > 1. Rozważmy dowolny spacer o długości k + 1 od vi\n",
+ "do vj . Wówczas na tym przejściu musi istnieć wierzchołek vl taki, że vl jest sąsiadujący z vj. Jeśli usuniemy vj z tej ścieżki,\n",
+ "to pozostała droga jest drogą o długości k od vi do vl. Liczba takich spacerów jest określona przez element (i,j) w macierzy Ak. Teraz każdemu takiemu wierzcholkowi vl odpowiada 1 na pozycji (l, j) w macierzy A. Wynik ten wynika z rozważenia elementu (i, j) w macierzy Ak+1 = AkA.\n",
+ "\n",
+ "Przykład:\n",
+ "\n",
+ "![graf_skierowany](./images/graf_skierowany.png)\n",
+ "\n",
+ "Macierz sąsiedztwa dla tego grafu:\n",
+ "\n",
+ "![macierz1](./images/adjacency.png)\n",
+ "\n",
+ "Macierz sąsiedztwa podniesiona do szóstej potęgi:\n",
+ "\n",
+ "![macierz2](./images/adjacency_6.png)\n",
+ "\n",
+ "Liczba spacerów o długości 6 jest równa sumie wszystkich elementów macierzy A6, czyli 122. Spośród nich liczba tych, które kończą się\n",
+ "w v4 jest równa sumie pozycji z kolumny 4 w A6, czyli 19. Zatem prawdopodobieństwo, że spacer losowy o długości 6 zakończy się w punkcie\n",
+ "v4 jest równe 19/122.\n",
+ "\n",
+ "Liczba spacerów długości 6, które zaczynają się w punkcie v1, jest równa sumie wartości pierwszego wiersza A6, czyli 15. Spośród spacerów\n",
+ "długości 6, które zaczynają się w punkcie v1, są 4, które kończą się w punkcie v5. Zatem prawdopodobieństwo, że spacer losowy o długości 6\n",
+ "zaczynający się w punkcie v1, zakończy się w punkcie v5, wynosi 4/15."
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### Klastrowanie grafów\n",
+ "\n",
+ "Klastrowanie jest klasycznym zadaniem eksploracji danych, polegającym na organizowaniu danych wejściowych w grupy (klastry) w taki sposób, że punkty danych w obrębie grupy są bardziej podobne do siebie niż poza nią. Zadanie to różni się od klasyfikacji nadzorowanej, w której przykłady różnych klas są znane a priori i są wykorzystywane do trenowania modelu obliczeniowego w celu przypisania innych obiektów do znanych grup. Celem klasteryzacji jest natomiast znalezienie naturalnych, wewnętrznych podklas w danych, bez zakładania a priori liczby lub rodzaju klastrów.\n",
+ "\n",
+ "W przypadku grafów, klastrowanie to proces grupowania węzłów grafu w klastry, uwzględniający strukturę krawędziową grafu w taki sposób, aby w każdym klastrze występowało kilka krawędzi, a niewiele pomiędzy klastrami. Klastrowanie grafu ma na celu podzielenie węzłów grafu na rozłączne grupy.\n",
+ "\n",
+ "![klastry](./images/klastry.png)"
],
"metadata": {
"collapsed": false,
@@ -118,10 +187,7 @@
"\n",
"$P(X_{n+1} = x|X_{n}=x_n,\\ldots X_{1}=x_{1}) = P(X_{n+1}=x | X_{n}=x_n)$\n",
"\n",
- "Oznacza to, że zmienna w ciągu \n",
- "X\n",
- "n\n",
- " ''pamięta'' tylko swój stan z poprzedniego kroku i wyłącznie od niego zależy."
+ "Oznacza to, że zmienna w ciągu (Xn) ''pamięta'' tylko swój stan z poprzedniego kroku i wyłącznie od niego zależy."
]
},
{