diff --git a/images/cykle.png b/images/cykle.png
new file mode 100644
index 0000000..9b1c2b3
Binary files /dev/null and b/images/cykle.png differ
diff --git a/images/random_walk_1d_1.png b/images/random_walk_1d_1.png
new file mode 100644
index 0000000..337ce13
Binary files /dev/null and b/images/random_walk_1d_1.png differ
diff --git a/images/random_walk_1d_2.png b/images/random_walk_1d_2.png
new file mode 100644
index 0000000..da267e1
Binary files /dev/null and b/images/random_walk_1d_2.png differ
diff --git a/images/random_walk_1d_3.png b/images/random_walk_1d_3.png
new file mode 100644
index 0000000..d23ff6d
Binary files /dev/null and b/images/random_walk_1d_3.png differ
diff --git a/images/random_walk_1d_4.png b/images/random_walk_1d_4.png
new file mode 100644
index 0000000..662379b
Binary files /dev/null and b/images/random_walk_1d_4.png differ
diff --git a/images/random_walk_2d.png b/images/random_walk_2d.png
new file mode 100644
index 0000000..6c41b15
Binary files /dev/null and b/images/random_walk_2d.png differ
diff --git a/matma2.ipynb b/matma2.ipynb
deleted file mode 100644
index cd6dc66..0000000
--- a/matma2.ipynb
+++ /dev/null
@@ -1,82 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Spacery losowe po grafach: algorytm wyszukiwania klastrów\n",
- "
\n",
- "Spacery losowe\n",
- "\n",
- "Graf G = (V, E) składa się ze\n",
- "zbioru wierzchołków V oraz zbioru krawędzi E, gdzie E zbiorem nieuporządkowanych par\n",
- "wierzchołków:\n",
- "\n",
- "$E ⊂\\{(x, y) : x, y ∈ V, x ≠ y\\} $\n",
- "\n",
- "Je»eli (x, y) ∈ E, to wierzchołki x, y nazywamy sąsiadami i oznaczamy x ∼ y. Stopniem\n",
- "wierzchołka x ∈ V nazywamy liczbę jego sąsiadów i oznaczamy deg(x).\n",
- "Na danym grafie G = (V, E) definiujemy prosty spacer losowy. Jest to łańcuch Markowa\n",
- "na przestrzeni stanów V z macierzą przejścia\n",
- "\n",
- "$P(x, y) = \\frac{1}{deg(x)}$ jeżeli y ∼ x\n",
- "\n",
- "$P(x, y) = 0$ w przeciwnym razie\n",
- "\n",
- "\n",
- "Gdy łańcuch znajduje się w wierzchołku x, to wybiera losowo (jednostajnie) jednego z jego\n",
- "sąsiadów i przechodzi do niego.\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Łancuch markova\n",
- "
\n",
- "Proces Markowa – ciąg zdarzeń, w którym prawdopodobieństwo każdego zdarzenia zależy jedynie od wyniku poprzedniego. W ujęciu matematycznym, procesy Markowa to takie procesy stochastyczne, które spełniają własność Markowa.\n",
- "\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."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Podgrafy silnie ze sobą powiązane\n",
- "\n",
- "Najprościej będzie to zaobserować na przykładzie:\n",
- "\n",
- "![](https://i.imgur.com/QrHGsgF.png)\n",
- "\n",
- "![](https://i.imgur.com/vqnrftV.png)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Wierzchołki krytyczne rozspójniające graf\n",
- "\n",
- "Graf spójny - graf w który dowolne dwa wierzchołki łączy pewna ścieżka\n",
- "\n",
- "![](https://i.imgur.com/pCLbkwz.png)\n",
- "\n",
- "Wierzchołkiem krytycznym powyższego grafu jest wierzchołek numer 4, usunięcie go spowoduje odłączenie wierzchołka numer 6 od reszty grafu"
- ]
- }
- ],
- "metadata": {
- "language_info": {
- "name": "python"
- },
- "orig_nbformat": 4
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/matma2nowy.ipynb b/matma2nowy.ipynb
index 16bba02..8cc3b03 100644
--- a/matma2nowy.ipynb
+++ b/matma2nowy.ipynb
@@ -2,20 +2,102 @@
"cells": [
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
- "Spacery losowe po grafach: algorytm wyszukiwania klastrów\n",
- "
\n",
- "Spacery losowe\n",
+ "## Spacery losowe po grafach: algorytm wyszukiwania klastrów\n",
"\n",
- "Graf G = (V, E) składa się ze\n",
- "zbioru wierzchołków V oraz zbioru krawędzi E, gdzie E zbiorem nieuporządkowanych par\n",
- "wierzchołków:\n",
+ "### Spacery losowe\n",
"\n",
- "$E ⊂\\{(x, y) : x, y ∈ V, x ≠ y\\} $\n",
+ "Spacer losowy można zdefiniować jako serię dyskretnych kroków wykonywanych przez obiekt w pewnym kierunku. Co więcej, kierunek i ruch obiektu w każdym kroku określamy probabilistycznie.\n",
"\n",
- "Je»eli (x, y) ∈ E, to wierzchołki x, y nazywamy sąsiadami i oznaczamy x ∼ y. Stopniem\n",
+ "W spacerze losowym przyszłe położenie obiektu jest całkowicie niezależne od bieżącego położenia. Ponadto jest to przykład procesu Markowa. Zaczynając od pewnej pozycji, obiekt może iść w dowolnym kierunku. Każdy krok wykonany przez obiekt w dowolnym kierunku ma przypisane prawdopodobieństwo, dlatego końcowe położenie jest całkowicie niezależne od punktu początkowego.\n",
+ "\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",
+ "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",
+ "![r_w_1d_2](./images/random_walk_1d_2.png)\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",
+ "![r_w_1d_3](./images/random_walk_1d_3.png)\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",
+ "![r_w_1d_4](./images/random_walk_1d_4.png)\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",
+ "![r_w_2d](./images/random_walk_2d.png)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### Grafy\n",
+ "\n",
+ "Grafem nazywamy uporządkowaną kolekcję dwóch zbiorów: zbioru wierzchołków *V* oraz zbioru krawędzi *E*. Zbiór wierzchołków jest dowolnej postaci. Elementami zbioru krawędzi są *e* ∈ *E*, które są podzbiorami postaci {v1, v2} dla pewnych dwóch wierzchołków v1, v2 ∈ *V* (jeśli graf jest nieskierowany) lub parą uporządkowaną (v1, v2) jeśli graf jest skierowany.\n",
+ "\n",
+ "Jeżeli (x, y) ∈ E, to wierzchołki x, y nazywamy sąsiadami i oznaczamy x ∼ y. Stopniem\n",
"wierzchołka x ∈ V nazywamy liczbę jego sąsiadów i oznaczamy deg(x).\n",
+ "\n",
+ "#### Podgrafy\n",
+ "Podgraf danego grafu G to graf powstały przez usunięcie z grafu G pewnej liczby wierzchołków lub krawędzi (z tym zastrzeżeniem, że usuwając pewien wierzchołek usuwamy wszystkie przyległe do niego krawędzie).\n",
+ "W szczególności każdy graf jest swoim podgrafem.\n",
+ "\n",
+ "#### Graf spójny\n",
+ "Graf spójny – graf, w którym każdą parę wierzchołków łączy pewna ścieżka. Graf nieposiadający powyższej własności to graf niespójny.\n",
+ "\n",
+ "Warunkiem koniecznym, by graf skierowany był spójny, jest spójność jego grafu podstawowego (tego samego grafu bez kierunków na krawędziach).\n",
+ "\n",
+ "#### Wierzchołki krytyczne rozspójniające graf\n",
+ "\n",
+ "Wierzchołek krytyczny to taki którego usunięcie sprawi że graf przestaje być grafem spójnym\n",
+ "\n",
+ "![](https://i.imgur.com/pCLbkwz.png)\n",
+ "\n",
+ "Wierzchołkiem krytycznym powyższego grafu jest wierzchołek numer 4, usunięcie go spowoduje odłączenie wierzchołka numer 6 od reszty grafu.\n",
+ "\n",
+ "Niektóre grafy nie posiadają wierzchołków krytycznych są to na przyklad:\n",
+ "\n",
+ "- grafy posiadające cykle (czyli zamkniętą ścieżkę z takim samym ostatnim i pierwszym wierzchołkiem):\n",
+ "\n",
+ "![](./images/cykle.png)\n",
+ "\n",
+ "- grafy pełne (grafy w których dla każdej pary węzłów istnieje krawędź je łącząca):\n",
+ "\n",
+ "![](https://i.imgur.com/BtJKeyz.png)"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### Klastry\n"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ "### Łancuch markova\n",
+ "\n",
"Na danym grafie G = (V, E) definiujemy prosty spacer losowy. Jest to łańcuch Markowa\n",
"na przestrzeni stanów V z macierzą przejścia\n",
"\n",
@@ -25,15 +107,13 @@
"\n",
"\n",
"Gdy łańcuch znajduje się w wierzchołku x, to wybiera losowo (jednostajnie) jednego z jego\n",
- "sąsiadów i przechodzi do niego.\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Łancuch markova\n",
- "
\n",
+ "sąsiadów i przechodzi do niego.\n",
+ "\n",
+ "Spacery losowe są podstawą algorytmu MCL.\n",
+ " Poruszając się losowo od węzła do węzła, istnieje większe prawdopodobieństwo poruszania się wewnątrz klastru, niż przecinania klastrów. Dzieje się tak, ponieważ z definicji klastry są wewnętrznie gęste, a są oddzielone rzadkimi regionami. W grupowaniu grafów gęstość i rzadkość definiuje się jako proporcję szczelin krawędziowych, które mają w sobie krawędzie.\n",
+ " Przeprowadzając spacery losowe, mamy większą szansę na znalezienie trendu gromadzenia się wierzchołków i definicji klastrów w grafie.\n",
+ " Spacery losowe w grafie są obliczane za pomocą łańcuchów Markowa.\n",
+ "\n",
"Proces Markowa – ciąg zdarzeń, w którym prawdopodobieństwo każdego zdarzenia zależy jedynie od wyniku poprzedniego. W ujęciu matematycznym, procesy Markowa to takie procesy stochastyczne, które spełniają własność Markowa.\n",
"\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",
@@ -46,9 +126,13 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
- "Podgrafy silnie ze sobą powiązane\n",
+ "### Podgrafy silnie ze sobą powiązane\n",
"\n",
"Najprościej będzie to zaobserować na przykładzie:\n",
"\n",
@@ -56,44 +140,32 @@
"\n",
"![](https://i.imgur.com/vqnrftV.png)\n",
"\n",
- "Jak widać a powyższym obrazku silnie ze sobą powiążane podgrafy to po prostu podgrafy których wierzchołki posiadają między sobą znacznie więcej krawędzi niż z pozostałymi wierzchołkami grafu, trochę inaczej wygląd asytuacja z grafami skierowanymi, w przypadku grafów skierowanych, podgraf silnie powiązany to podgraf z którym z każdego wierzchołka można osiągnąć inny wierzchołek, jak na poniższym obrazku\n",
+ "Jak widać a powyższym obrazku silnie ze sobą powiążane podgrafy to po prostu podgrafy których wierzchołki posiadają między sobą znacznie więcej krawędzi niż z pozostałymi wierzchołkami grafu.\n",
+ "\n",
+ "W przypadku grafów skierowanych, podgraf silnie powiązany to podgraf z którym z każdego wierzchołka można osiągnąć inny wierzchołek, jak na poniższym obrazku:\n",
"\n",
"![](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e1/Scc-1.svg/712px-Scc-1.svg.png)"
]
},
{
"cell_type": "markdown",
- "metadata": {},
- "source": [
- "Wierzchołki krytyczne rozspójniające graf\n",
- "\n",
- "Graf spójny - graf w którym dowolne dwa wierzchołki łączy pewna ścieżka\n",
- "\n",
- "![](https://i.imgur.com/pCLbkwz.png)\n",
- "\n",
- "Wierzchołkiem krytycznym powyższego grafu jest wierzchołek numer 4, usunięcie go spowoduje odłączenie wierzchołka numer 6 od reszty grafu.\n",
- "\n",
- "Więc wierzchołek krytyczny to taki którego usunięcie sprawi że graf przestaje być grafem spójnym\n",
- "Niektóre grafy nie posiadają wierzchołków krytycznych są ta np\n",
- "\n",
- "cykle:\n",
- "\n",
- "\n",
- "![](https://www.researchgate.net/publication/341354100/figure/fig1/AS:890737768026113@1589379841098/Strong-3-rainbow-colorings-of-C3-C4-C5-C6-and-C8.png)\n",
- "\n",
- "grafy pełne:\n",
- "\n",
- "![](https://i.imgur.com/BtJKeyz.png)"
- ]
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": []
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
- " Zastosowanie spacerów losowych w klastrowaniu grafów.\n",
- "
\n",
- "
\n",
- "
\n",
+ "### Zastosowanie spacerów losowych w klastrowaniu grafów.\n",
+ "\n",
"Spacery losowe na grafach nadają się do klastrowania ponieważ istnieje znacznie większeprawdopodobieństwo że poruszając się losowo zostaniemy w obrębie danego klastru. klastry są wewnątrz gęste a wyjścia z klastru są rzadkie. Do klastrowania można wykorzystać algorytm MCL(Markov Cluster Algorithm)\n",
"1) Obliczamy dla każdej pary wezłów u i v prawdopodobieństwo rozpoczęcia od węzła u i zakończenia w węźle v po przejściu k kroków.\n",
"2) Otrzymaną macierz normalizujemy do wartości z przedziału 0-1\n",
@@ -118,4 +190,4 @@
},
"nbformat": 4,
"nbformat_minor": 2
-}
+}
\ No newline at end of file