-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplots.Rnw
49 lines (40 loc) · 1.7 KB
/
plots.Rnw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
\documentclass[11pt]{article}
\usepackage[polish]{babel}
\usepackage[utf8]{inputenc}
%\usepackage{color}
\usepackage[usenames,dvipsnames,x11names,table]{xcolor}
\begin{document}
\setkeys{Gin}{width=\textwidth}
Na wszystkich wykresach poniżej zastosowano następującą kolorystykę:
\begin{itemize}
\item \textcolor{black}{Macierz sąsiedztwa}
\item \textcolor{red}{Lista sąsiedztwa}
\end{itemize}
\section{Losowe}
<<echo=FALSE,fig=TRUE>>=
amatrix <- read.table('matrix.data')
alist <- read.table('list.data')
plot(amatrix, type = 'l', xlab = 'Ilość wierzchołków', ylab = 'Czas [ns]', yaxt = 'n')
lines(alist, col = 'red')
@
Na wykresach widać, że lista sąsiedztwa ma trochę lepsze czasy dla algorytmu DFS.
Wynika to z tego iż można uzyskać listę sąsiadów znacznie szybciej niż w macierzy
sąsiedztwa, gdyż nie jest wymagane przepisanie całej listy a jedynie zwrocenie
do niej wskaźnika.
Złożoności dla poszczególnych reprezentacji:
\begin{table}
\begin{tabular}{|l|c|c|}
\hline
& Macierz sąsiedztwa & Lista sąsiedztwa \\\hline
Złożoność pamięciowa & $O(|V|^2)$ & $O(|V| + |E|)$ \\
Istnienie krawędzi & $O(1)$ & $O(n)$ (gdzie $n$ to liczba sąsiadów) \\
Wyznaczanie listy sąsiadów & $O(n)$ ($n$ j.w.) & $O(1)$ \\
\hline
\end{tabular}
\end{table}
Algorytm DFS ma złożoność $O(|V| + |E|)$ jednak jego wydajność zależy od szybkości
poszukiwania wszystkich sąsiadów danego wierzchołka, przez co nie jest zbyt
wydajny dla reprezentacji grafów w postaci macierzy sąsiedztwa, gdzie wyszukiwanie
sąsiadów jest funkcją liniową.
Sortować topologicznie można wszystkie grafy nieposiadające cykli.
\end{document}