Compare commits
4 Commits
f41ec73a05
...
3338b255a1
Author | SHA1 | Date | |
---|---|---|---|
3338b255a1 | |||
cd265e4ee9 | |||
4b4634994c | |||
15954963ca |
0
code/python/src/__init__.py
Normal file
0
code/python/src/__init__.py
Normal file
0
code/python/src/graphs/__init__.py
Normal file
0
code/python/src/graphs/__init__.py
Normal file
46
code/python/src/graphs/graph.py
Normal file
46
code/python/src/graphs/graph.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# IMPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
#
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# EXPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'Graph',
|
||||||
|
];
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# CLASS Graph
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
class Graph(object):
|
||||||
|
'''
|
||||||
|
a data structure for graphs
|
||||||
|
'''
|
||||||
|
nodes: list[str];
|
||||||
|
edges: list[tuple[str,str]]
|
||||||
|
|
||||||
|
def __init__(self, nodes: list[str], edges: list[tuple[str,str]]):
|
||||||
|
self.nodes = nodes;
|
||||||
|
self.edges = edges;
|
||||||
|
return;
|
||||||
|
|
||||||
|
def successor(self, u: str):
|
||||||
|
'''
|
||||||
|
@returns
|
||||||
|
list of successor nodes
|
||||||
|
'''
|
||||||
|
return [ v for (u_, v) in self.edges if u == u_ ];
|
||||||
|
|
||||||
|
def predecessor(self, v: str):
|
||||||
|
'''
|
||||||
|
@returns
|
||||||
|
list of predecessor nodes
|
||||||
|
'''
|
||||||
|
return [ u for (u, v_) in self.edges if v == v_ ];
|
91
code/python/src/graphs/tarjan.py
Normal file
91
code/python/src/graphs/tarjan.py
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# IMPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
from enum import Enum;
|
||||||
|
|
||||||
|
from src.local.typing import *;
|
||||||
|
|
||||||
|
from src.stacks.stack import *;
|
||||||
|
from src.graphs.graph import *
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# EXPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'tarjan_algorithm',
|
||||||
|
];
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# CONSTANTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
class State(Enum):
|
||||||
|
UNTOUCHED = 0;
|
||||||
|
PENDING = 1;
|
||||||
|
FINISHED = 2;
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# Tarjan Algorithm
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
class NodeInformation:
|
||||||
|
root: int;
|
||||||
|
index: int;
|
||||||
|
state: State;
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.root = self.index = 0;
|
||||||
|
self.state = State.UNTOUCHED;
|
||||||
|
|
||||||
|
def tarjan_algorithm(G: Graph) -> List[Any]:
|
||||||
|
'''
|
||||||
|
runs the Tarjan-Algorithm to compute the strongly connected components
|
||||||
|
'''
|
||||||
|
|
||||||
|
# sonst Stack erstellen und Bearbeitungszustand der Knoten im Speicher notieren:
|
||||||
|
S = Stack();
|
||||||
|
index = 0;
|
||||||
|
infos = { u: NodeInformation() for u in G.nodes };
|
||||||
|
components = [];
|
||||||
|
|
||||||
|
def tarjan_visit(v: Any):
|
||||||
|
'''
|
||||||
|
recursive depth-first search algorithm to compute components
|
||||||
|
'''
|
||||||
|
nonlocal G, S, index, components;
|
||||||
|
|
||||||
|
if not(infos[v].state == State.UNTOUCHED):
|
||||||
|
return;
|
||||||
|
|
||||||
|
index += 1;
|
||||||
|
infos[v].index = infos[v].root = index;
|
||||||
|
S.push(v);
|
||||||
|
|
||||||
|
infos[v].state = State.PENDING;
|
||||||
|
# depth first search:
|
||||||
|
for u in G.successor(v):
|
||||||
|
tarjan_visit(u);
|
||||||
|
# remains relevant for v, provided u still in Stack:
|
||||||
|
if u in S:
|
||||||
|
infos[v].root = min(infos[v].root, infos[u].root);
|
||||||
|
infos[v].state = State.FINISHED;
|
||||||
|
|
||||||
|
# if at root of component pop everything from stack up to root and add component:
|
||||||
|
if infos[v].index == infos[v].root:
|
||||||
|
component = [];
|
||||||
|
condition_reached_root = False;
|
||||||
|
while not condition_reached_root:
|
||||||
|
u = S.pop();
|
||||||
|
component.append(u);
|
||||||
|
condition_reached_root = (u == v);
|
||||||
|
components.append(component);
|
||||||
|
return;
|
||||||
|
|
||||||
|
for v in G.nodes:
|
||||||
|
tarjan_visit(v);
|
||||||
|
return components;
|
0
code/python/src/local/__init__.py
Normal file
0
code/python/src/local/__init__.py
Normal file
24
code/python/src/local/config.py
Normal file
24
code/python/src/local/config.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# IMPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
import json;
|
||||||
|
from yaml import add_constructor;
|
||||||
|
from yaml import load;
|
||||||
|
from yaml import Loader;
|
||||||
|
from yaml import FullLoader;
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# EXPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'json',
|
||||||
|
'add_constructor',
|
||||||
|
'load',
|
||||||
|
'Loader',
|
||||||
|
'FullLoader',
|
||||||
|
];
|
20
code/python/src/local/io.py
Normal file
20
code/python/src/local/io.py
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# IMPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
import io;
|
||||||
|
import getpass;
|
||||||
|
import argparse;
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# EXPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'io',
|
||||||
|
'getpass',
|
||||||
|
'argparse',
|
||||||
|
];
|
18
code/python/src/local/maths.py
Normal file
18
code/python/src/local/maths.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# IMPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
import math;
|
||||||
|
import random;
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# EXPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'math',
|
||||||
|
'random',
|
||||||
|
];
|
18
code/python/src/local/misc.py
Normal file
18
code/python/src/local/misc.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# IMPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
import re;
|
||||||
|
from textwrap import dedent;
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# EXPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
're',
|
||||||
|
'dedent',
|
||||||
|
];
|
23
code/python/src/local/system.py
Normal file
23
code/python/src/local/system.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# IMPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
import os;
|
||||||
|
import sys;
|
||||||
|
|
||||||
|
import platform;
|
||||||
|
import shutil;
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# EXPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'os',
|
||||||
|
'sys',
|
||||||
|
'platform',
|
||||||
|
'shutil',
|
||||||
|
];
|
37
code/python/src/local/typing.py
Normal file
37
code/python/src/local/typing.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# IMPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
from types import TracebackType;
|
||||||
|
|
||||||
|
from typing import Any;
|
||||||
|
from typing import Callable;
|
||||||
|
from typing import Dict;
|
||||||
|
from typing import Generator;
|
||||||
|
from typing import Generic;
|
||||||
|
from typing import List;
|
||||||
|
from typing import Tuple;
|
||||||
|
from typing import Type;
|
||||||
|
from typing import TypeVar;
|
||||||
|
from typing import Union;
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# EXPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'TracebackType',
|
||||||
|
'Any',
|
||||||
|
'Callable',
|
||||||
|
'Dict',
|
||||||
|
'Generator',
|
||||||
|
'Generic',
|
||||||
|
'List',
|
||||||
|
'Tuple',
|
||||||
|
'Type',
|
||||||
|
'TypeVar',
|
||||||
|
'Union',
|
||||||
|
];
|
@ -11,6 +11,9 @@ import sys;
|
|||||||
os.chdir(os.path.join(os.path.dirname(__file__), '..'));
|
os.chdir(os.path.join(os.path.dirname(__file__), '..'));
|
||||||
sys.path.insert(0, os.getcwd());
|
sys.path.insert(0, os.getcwd());
|
||||||
|
|
||||||
|
from src.graphs.graph import *;
|
||||||
|
from src.graphs.tarjan import *;
|
||||||
|
|
||||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
# GLOBAL CONSTANTS/VARIABLES
|
# GLOBAL CONSTANTS/VARIABLES
|
||||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@ -22,7 +25,15 @@ sys.path.insert(0, os.getcwd());
|
|||||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
def enter():
|
def enter():
|
||||||
print('Hello world!')
|
## Beispiel aus Seminarblatt 1
|
||||||
|
## TODO -> schieben in config datei
|
||||||
|
G = Graph(
|
||||||
|
nodes=[1,2,3,4,5,6,7],
|
||||||
|
edges=[(1,2), (1,3), (2,3), (3,4), (4,5), (5,2), (5,6), (5,7), (6,7)],
|
||||||
|
);
|
||||||
|
components = tarjan_algorithm(G);
|
||||||
|
for component in components:
|
||||||
|
print(component);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
0
code/python/src/stacks/__init__.py
Normal file
0
code/python/src/stacks/__init__.py
Normal file
64
code/python/src/stacks/stack.py
Normal file
64
code/python/src/stacks/stack.py
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# IMPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
from src.local.typing import *;
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# EXPORTS
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'Stack',
|
||||||
|
];
|
||||||
|
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
# CLASS Stack
|
||||||
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
class Stack:
|
||||||
|
'''
|
||||||
|
A data structure for stacks
|
||||||
|
'''
|
||||||
|
values: list[Any];
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.values = [];
|
||||||
|
return;
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
'''
|
||||||
|
@returns
|
||||||
|
number of elements in stack
|
||||||
|
'''
|
||||||
|
return len(self.values);
|
||||||
|
|
||||||
|
def __contains__(self, value: Any) -> bool:
|
||||||
|
return value in self.values;
|
||||||
|
|
||||||
|
def push(self, value: Any):
|
||||||
|
'''
|
||||||
|
add element to stack
|
||||||
|
'''
|
||||||
|
self.values.append(value);
|
||||||
|
|
||||||
|
def pop(self) -> Any:
|
||||||
|
'''
|
||||||
|
@returns
|
||||||
|
top element from stack and removes it
|
||||||
|
'''
|
||||||
|
value = self.top();
|
||||||
|
self.values = self.values[:-1];
|
||||||
|
return value;
|
||||||
|
|
||||||
|
def top(self) -> Any:
|
||||||
|
'''
|
||||||
|
@returns
|
||||||
|
top element from stack without removal
|
||||||
|
'''
|
||||||
|
if len(self.values) == 0:
|
||||||
|
raise Exception('Stack is empty!');
|
||||||
|
return self.values[-1];
|
@ -2,13 +2,24 @@
|
|||||||
|
|
||||||
## Agenda ##
|
## Agenda ##
|
||||||
|
|
||||||
- [ ] Orga:
|
- [x] Orga
|
||||||
- [ ] Themen:
|
- Ziel von Seminaren vs. Übung
|
||||||
|
- Repo
|
||||||
## Nächste Woche ##
|
- [x] Themen:
|
||||||
|
- Einige (nicht alle) Begriffe über Graphen
|
||||||
-
|
- Weg vs. Pfad vs. Zyklus
|
||||||
|
- Zusammenhang:
|
||||||
|
- (schwach) zusammenhängend ⟺ ∀u,v ∈ V(G): ∃ Weg von entweder u nach v ODER v nach u
|
||||||
|
- **stark** zusammenhängend ⟺ ∀u,v ∈ V(G): ∃ Weg von u nach v
|
||||||
|
</br>
|
||||||
|
⟺ ∀u,v ∈ V(G): ∃ Weg von sowohl u nach v UND v nach u
|
||||||
|
- Für unger. Gph: zshgd ⟺ stark zshgd. Aber nicht für ger. Gph.
|
||||||
|
- induzierter Teilgraph
|
||||||
|
- stark zshgd Komponente
|
||||||
|
- Konstruktion
|
||||||
|
- maximale Komponenten
|
||||||
|
|
||||||
### TODOs (Studierende) ###
|
### TODOs (Studierende) ###
|
||||||
|
|
||||||
-
|
- Begriffe aus VL1 **sorgfältig** (siehe Anmerkung im Skript!) aufschreiben, verinnerlichen, sich damit vertraut machen.
|
||||||
|
- abzugebende Übungsblätter zu Ende machen.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user