Spaces:
Running
Running
Upload README.md
Browse files
README.md
ADDED
|
@@ -0,0 +1,2575 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: Algorithmen
|
| 3 |
+
emoji: 🧮
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: indigo
|
| 6 |
+
sdk: static
|
| 7 |
+
pinned: false
|
| 8 |
+
short_description: Algorithmen, Datenstrukturen, Optimierung und AI Systems.
|
| 9 |
+
---
|
| 10 |
+
|
| 11 |
+
# Algorithmen
|
| 12 |
+
|
| 13 |
+
**Die deutschsprachige Referenz zu Algorithmen, Datenstrukturen, Laufzeitkomplexität, Suchverfahren, Sortierverfahren, Graphalgorithmen, Optimierung, Machine Learning und algorithmischen KI-Systemen.**
|
| 14 |
+
|
| 15 |
+
Algorithmen gehören zu den grundlegenden Bausteinen der Informatik. Sie beschreiben **präzise Verfahren**, mit denen Eingaben verarbeitet, Probleme gelöst und Ergebnisse erzeugt werden.
|
| 16 |
+
|
| 17 |
+
Ob Suchmaschine, Navigationssystem, Datenbank, Empfehlungssystem, Machine-Learning-Modell, KI-Agent oder Betriebssystem: Hinter nahezu jedem digitalen System stehen Algorithmen.
|
| 18 |
+
|
| 19 |
+
Diese Hugging-Face-Organisation bündelt deutschsprachige technische Ressourcen rund um:
|
| 20 |
+
|
| 21 |
+
- **Algorithmen**
|
| 22 |
+
- **Datenstrukturen**
|
| 23 |
+
- **Algorithm Design**
|
| 24 |
+
- **Laufzeitkomplexität**
|
| 25 |
+
- **Big-O-Notation**
|
| 26 |
+
- **Sortieralgorithmen**
|
| 27 |
+
- **Suchalgorithmen**
|
| 28 |
+
- **Graphalgorithmen**
|
| 29 |
+
- **Greedy Algorithms**
|
| 30 |
+
- **Divide and Conquer**
|
| 31 |
+
- **Dynamic Programming**
|
| 32 |
+
- **Backtracking**
|
| 33 |
+
- **Randomisierte Algorithmen**
|
| 34 |
+
- **Optimierungsalgorithmen**
|
| 35 |
+
- **Numerische Verfahren**
|
| 36 |
+
- **Machine-Learning-Algorithmen**
|
| 37 |
+
- **KI-Algorithmen**
|
| 38 |
+
- **Such- und Planungsverfahren**
|
| 39 |
+
- **Reinforcement Learning**
|
| 40 |
+
- **Algorithmic Decision Systems**
|
| 41 |
+
- **Algorithm Engineering**
|
| 42 |
+
|
| 43 |
+
Ziel ist eine verständliche, technisch belastbare und praxisnahe Referenz mit **Erklärungen, Komplexitätsanalysen, Beispielen, Architekturmustern, interaktiven Spaces, Benchmarks und weiterführenden Ressourcen**.
|
| 44 |
+
|
| 45 |
+
> **Kurzdefinition:** Ein Algorithmus ist eine endliche, eindeutig beschriebene Folge von Schritten, mit der ein Problem gelöst oder eine Eingabe in ein gewünschtes Ergebnis überführt wird.
|
| 46 |
+
|
| 47 |
+
---
|
| 48 |
+
|
| 49 |
+
# Was ist ein Algorithmus?
|
| 50 |
+
|
| 51 |
+
Ein Algorithmus ist eine präzise Handlungsanweisung.
|
| 52 |
+
|
| 53 |
+
Er legt fest:
|
| 54 |
+
|
| 55 |
+
1. welche Eingaben verarbeitet werden,
|
| 56 |
+
2. welche Schritte durchgeführt werden,
|
| 57 |
+
3. in welcher Reihenfolge diese Schritte erfolgen,
|
| 58 |
+
4. wann der Prozess endet,
|
| 59 |
+
5. welches Ergebnis ausgegeben wird.
|
| 60 |
+
|
| 61 |
+
Ein einfaches Beispiel ist das Sortieren einer Liste.
|
| 62 |
+
|
| 63 |
+
Eingabe:
|
| 64 |
+
|
| 65 |
+
```text
|
| 66 |
+
5, 2, 9, 1
|
| 67 |
+
```
|
| 68 |
+
|
| 69 |
+
Ausgabe:
|
| 70 |
+
|
| 71 |
+
```text
|
| 72 |
+
1, 2, 5, 9
|
| 73 |
+
```
|
| 74 |
+
|
| 75 |
+
Der Algorithmus beschreibt, wie aus der unsortierten Liste die sortierte Liste entsteht.
|
| 76 |
+
|
| 77 |
+
Wichtig ist:
|
| 78 |
+
|
| 79 |
+
**Ein Algorithmus ist nicht dasselbe wie ein Programm.**
|
| 80 |
+
|
| 81 |
+
Ein Algorithmus beschreibt die Logik.
|
| 82 |
+
|
| 83 |
+
Ein Programm ist die konkrete Implementierung dieser Logik in einer Programmiersprache.
|
| 84 |
+
|
| 85 |
+
---
|
| 86 |
+
|
| 87 |
+
# Algorithmus einfach erklärt
|
| 88 |
+
|
| 89 |
+
Ein Kochrezept ist ein gutes Alltagsbeispiel.
|
| 90 |
+
|
| 91 |
+
Ein Rezept enthält:
|
| 92 |
+
|
| 93 |
+
- Zutaten,
|
| 94 |
+
- Reihenfolge,
|
| 95 |
+
- Verarbeitungsschritte,
|
| 96 |
+
- Bedingungen,
|
| 97 |
+
- Ergebnis.
|
| 98 |
+
|
| 99 |
+
Ein Algorithmus funktioniert ähnlich.
|
| 100 |
+
|
| 101 |
+
Beispiel:
|
| 102 |
+
|
| 103 |
+
**Aufgabe:** Größte Zahl in einer Liste finden.
|
| 104 |
+
|
| 105 |
+
Möglicher Algorithmus:
|
| 106 |
+
|
| 107 |
+
1. Nimm die erste Zahl als bisher größtes Element.
|
| 108 |
+
2. Vergleiche sie mit der nächsten Zahl.
|
| 109 |
+
3. Ist die neue Zahl größer, speichere sie als neues Maximum.
|
| 110 |
+
4. Wiederhole den Vergleich bis zum Ende.
|
| 111 |
+
5. Gib das größte Element aus.
|
| 112 |
+
|
| 113 |
+
Dieser Algorithmus funktioniert unabhängig davon, ob die Liste 5, 500 oder 5 Millionen Werte enthält.
|
| 114 |
+
|
| 115 |
+
---
|
| 116 |
+
|
| 117 |
+
# Warum sind Algorithmen wichtig?
|
| 118 |
+
|
| 119 |
+
Algorithmen bestimmen:
|
| 120 |
+
|
| 121 |
+
- wie schnell Software arbeitet,
|
| 122 |
+
- wie viel Speicher benötigt wird,
|
| 123 |
+
- wie gut ein Problem skaliert,
|
| 124 |
+
- wie zuverlässig Ergebnisse entstehen,
|
| 125 |
+
- wie Daten verarbeitet werden,
|
| 126 |
+
- wie Entscheidungen automatisiert werden.
|
| 127 |
+
|
| 128 |
+
Zwei Programme können dasselbe Problem lösen und trotzdem völlig unterschiedlich effizient sein.
|
| 129 |
+
|
| 130 |
+
Ein schlechter Algorithmus kann bei kleinen Datenmengen funktionieren und bei großen Datenmengen unbrauchbar werden.
|
| 131 |
+
|
| 132 |
+
Deshalb sind **Algorithmuswahl und Komplexitätsanalyse** zentrale Themen der Informatik.
|
| 133 |
+
|
| 134 |
+
---
|
| 135 |
+
|
| 136 |
+
# Eigenschaften eines guten Algorithmus
|
| 137 |
+
|
| 138 |
+
Ein guter Algorithmus sollte mehrere Eigenschaften besitzen.
|
| 139 |
+
|
| 140 |
+
## Korrektheit
|
| 141 |
+
|
| 142 |
+
Er liefert für gültige Eingaben das erwartete Ergebnis.
|
| 143 |
+
|
| 144 |
+
## Endlichkeit
|
| 145 |
+
|
| 146 |
+
Er endet nach einer endlichen Anzahl von Schritten.
|
| 147 |
+
|
| 148 |
+
## Eindeutigkeit
|
| 149 |
+
|
| 150 |
+
Die einzelnen Schritte sind klar definiert.
|
| 151 |
+
|
| 152 |
+
## Effizienz
|
| 153 |
+
|
| 154 |
+
Laufzeit und Speicherverbrauch sind angemessen.
|
| 155 |
+
|
| 156 |
+
## Robustheit
|
| 157 |
+
|
| 158 |
+
Der Algorithmus kann mit Randfällen und problematischen Eingaben umgehen.
|
| 159 |
+
|
| 160 |
+
## Verständlichkeit
|
| 161 |
+
|
| 162 |
+
Die Logik ist nachvollziehbar und wartbar.
|
| 163 |
+
|
| 164 |
+
---
|
| 165 |
+
|
| 166 |
+
# Algorithmus vs. Heuristik
|
| 167 |
+
|
| 168 |
+
Ein Algorithmus kann exakt definiert sein.
|
| 169 |
+
|
| 170 |
+
Eine **Heuristik** ist dagegen häufig eine praktische Näherungsstrategie.
|
| 171 |
+
|
| 172 |
+
Beispiel:
|
| 173 |
+
|
| 174 |
+
Ein Optimierungsproblem kann theoretisch eine exakte Lösung besitzen, aber deren Berechnung wäre extrem teuer.
|
| 175 |
+
|
| 176 |
+
Dann kann eine Heuristik eine ausreichend gute Lösung deutlich schneller finden.
|
| 177 |
+
|
| 178 |
+
Heuristiken sind besonders relevant bei:
|
| 179 |
+
|
| 180 |
+
- Planung,
|
| 181 |
+
- Optimierung,
|
| 182 |
+
- Suchproblemen,
|
| 183 |
+
- KI-Systemen,
|
| 184 |
+
- Routing.
|
| 185 |
+
|
| 186 |
+
---
|
| 187 |
+
|
| 188 |
+
# Algorithmus vs. Künstliche Intelligenz
|
| 189 |
+
|
| 190 |
+
Nicht jeder Algorithmus ist KI.
|
| 191 |
+
|
| 192 |
+
Ein klassischer Sortieralgorithmus ist keine künstliche Intelligenz.
|
| 193 |
+
|
| 194 |
+
KI-Systeme verwenden jedoch sehr viele Algorithmen.
|
| 195 |
+
|
| 196 |
+
Beispiele:
|
| 197 |
+
|
| 198 |
+
- Optimierungsalgorithmen,
|
| 199 |
+
- Trainingsalgorithmen,
|
| 200 |
+
- Suchverfahren,
|
| 201 |
+
- Sampling,
|
| 202 |
+
- Routing,
|
| 203 |
+
- Retrieval,
|
| 204 |
+
- Graphverfahren,
|
| 205 |
+
- Planungsverfahren.
|
| 206 |
+
|
| 207 |
+
Künstliche Intelligenz baut auf algorithmischen Grundlagen auf.
|
| 208 |
+
|
| 209 |
+
---
|
| 210 |
+
|
| 211 |
+
# Algorithmus vs. Machine Learning
|
| 212 |
+
|
| 213 |
+
Ein klassischer Algorithmus besitzt explizite Regeln.
|
| 214 |
+
|
| 215 |
+
Ein Machine-Learning-Modell lernt Teile seines Verhaltens aus Daten.
|
| 216 |
+
|
| 217 |
+
Beispiel:
|
| 218 |
+
|
| 219 |
+
## Klassischer Algorithmus
|
| 220 |
+
|
| 221 |
+
```text
|
| 222 |
+
Wenn Temperatur > 80:
|
| 223 |
+
Warnung ausgeben
|
| 224 |
+
```
|
| 225 |
+
|
| 226 |
+
## Machine Learning
|
| 227 |
+
|
| 228 |
+
Das Modell lernt aus historischen Daten, welche Kombination von Sensorwerten wahrscheinlich auf einen Fehler hinweist.
|
| 229 |
+
|
| 230 |
+
Machine Learning ersetzt Algorithmen nicht.
|
| 231 |
+
|
| 232 |
+
Es erweitert die Menge der Probleme, die algorithmisch gelöst werden können.
|
| 233 |
+
|
| 234 |
+
---
|
| 235 |
+
|
| 236 |
+
# Was ist Algorithm Design?
|
| 237 |
+
|
| 238 |
+
Algorithm Design beschreibt die systematische Entwicklung von Lösungsverfahren.
|
| 239 |
+
|
| 240 |
+
Typische Fragen:
|
| 241 |
+
|
| 242 |
+
- Wie lässt sich das Problem strukturieren?
|
| 243 |
+
- Welche Datenstruktur passt?
|
| 244 |
+
- Kann das Problem zerlegt werden?
|
| 245 |
+
- Gibt es wiederkehrende Teilprobleme?
|
| 246 |
+
- Ist eine exakte Lösung nötig?
|
| 247 |
+
- Welche Laufzeit ist akzeptabel?
|
| 248 |
+
|
| 249 |
+
Algorithm Design ist mehr als Programmieren.
|
| 250 |
+
|
| 251 |
+
Es geht um die zugrunde liegende Problemlösungsstrategie.
|
| 252 |
+
|
| 253 |
+
---
|
| 254 |
+
|
| 255 |
+
# Datenstrukturen
|
| 256 |
+
|
| 257 |
+
Algorithmen und Datenstrukturen gehören zusammen.
|
| 258 |
+
|
| 259 |
+
Eine Datenstruktur bestimmt, wie Informationen gespeichert und organisiert werden.
|
| 260 |
+
|
| 261 |
+
Typische Datenstrukturen:
|
| 262 |
+
|
| 263 |
+
- Array,
|
| 264 |
+
- Liste,
|
| 265 |
+
- Stack,
|
| 266 |
+
- Queue,
|
| 267 |
+
- Hash Table,
|
| 268 |
+
- Tree,
|
| 269 |
+
- Heap,
|
| 270 |
+
- Graph,
|
| 271 |
+
- Set,
|
| 272 |
+
- Map.
|
| 273 |
+
|
| 274 |
+
Die Wahl der Datenstruktur kann die Effizienz eines Algorithmus entscheidend beeinflussen.
|
| 275 |
+
|
| 276 |
+
---
|
| 277 |
+
|
| 278 |
+
# Arrays
|
| 279 |
+
|
| 280 |
+
Arrays speichern Elemente in einer festen Reihenfolge.
|
| 281 |
+
|
| 282 |
+
Vorteile:
|
| 283 |
+
|
| 284 |
+
- schneller direkter Zugriff über Index,
|
| 285 |
+
- kompakte Speicherung.
|
| 286 |
+
|
| 287 |
+
Typische Operationen:
|
| 288 |
+
|
| 289 |
+
- Lesen,
|
| 290 |
+
- Schreiben,
|
| 291 |
+
- Iteration.
|
| 292 |
+
|
| 293 |
+
---
|
| 294 |
+
|
| 295 |
+
# Verkettete Listen
|
| 296 |
+
|
| 297 |
+
Linked Lists speichern Elemente als Knoten mit Verweisen.
|
| 298 |
+
|
| 299 |
+
Vorteile:
|
| 300 |
+
|
| 301 |
+
- flexible Größe,
|
| 302 |
+
- Einfügen und Entfernen kann effizient sein.
|
| 303 |
+
|
| 304 |
+
Nachteile:
|
| 305 |
+
|
| 306 |
+
- kein direkter Indexzugriff,
|
| 307 |
+
- zusätzlicher Speicher für Verweise.
|
| 308 |
+
|
| 309 |
+
---
|
| 310 |
+
|
| 311 |
+
# Stack
|
| 312 |
+
|
| 313 |
+
Ein Stack arbeitet nach dem Prinzip:
|
| 314 |
+
|
| 315 |
+
**Last In, First Out**
|
| 316 |
+
|
| 317 |
+
Typische Operationen:
|
| 318 |
+
|
| 319 |
+
- push,
|
| 320 |
+
- pop,
|
| 321 |
+
- peek.
|
| 322 |
+
|
| 323 |
+
Anwendungen:
|
| 324 |
+
|
| 325 |
+
- Funktionsaufrufe,
|
| 326 |
+
- Undo,
|
| 327 |
+
- Parsing,
|
| 328 |
+
- Tiefensuche.
|
| 329 |
+
|
| 330 |
+
---
|
| 331 |
+
|
| 332 |
+
# Queue
|
| 333 |
+
|
| 334 |
+
Eine Queue arbeitet typischerweise nach:
|
| 335 |
+
|
| 336 |
+
**First In, First Out**
|
| 337 |
+
|
| 338 |
+
Anwendungen:
|
| 339 |
+
|
| 340 |
+
- Job-Verarbeitung,
|
| 341 |
+
- Messaging,
|
| 342 |
+
- Breadth-First Search,
|
| 343 |
+
- Scheduling.
|
| 344 |
+
|
| 345 |
+
---
|
| 346 |
+
|
| 347 |
+
# Hash Tables
|
| 348 |
+
|
| 349 |
+
Hash Tables speichern Schlüssel-Wert-Paare.
|
| 350 |
+
|
| 351 |
+
Typische Eigenschaft:
|
| 352 |
+
|
| 353 |
+
Sehr schneller durchschnittlicher Zugriff.
|
| 354 |
+
|
| 355 |
+
Anwendungen:
|
| 356 |
+
|
| 357 |
+
- Caches,
|
| 358 |
+
- Maps,
|
| 359 |
+
- Dictionaries,
|
| 360 |
+
- Indizes.
|
| 361 |
+
|
| 362 |
+
Die Qualität der Hash-Funktion und Kollisionsbehandlung ist entscheidend.
|
| 363 |
+
|
| 364 |
+
---
|
| 365 |
+
|
| 366 |
+
# Bäume
|
| 367 |
+
|
| 368 |
+
Trees organisieren Daten hierarchisch.
|
| 369 |
+
|
| 370 |
+
Beispiele:
|
| 371 |
+
|
| 372 |
+
- Binary Tree,
|
| 373 |
+
- Binary Search Tree,
|
| 374 |
+
- AVL Tree,
|
| 375 |
+
- B-Tree,
|
| 376 |
+
- Trie.
|
| 377 |
+
|
| 378 |
+
Bäume werden genutzt für:
|
| 379 |
+
|
| 380 |
+
- Suche,
|
| 381 |
+
- Dateisysteme,
|
| 382 |
+
- Datenbanken,
|
| 383 |
+
- Compiler,
|
| 384 |
+
- Autovervollständigung.
|
| 385 |
+
|
| 386 |
+
---
|
| 387 |
+
|
| 388 |
+
# Heaps
|
| 389 |
+
|
| 390 |
+
Ein Heap ist eine Datenstruktur für Prioritätsoperationen.
|
| 391 |
+
|
| 392 |
+
Typische Anwendung:
|
| 393 |
+
|
| 394 |
+
- Priority Queue,
|
| 395 |
+
- Scheduling,
|
| 396 |
+
- Dijkstra,
|
| 397 |
+
- Heap Sort.
|
| 398 |
+
|
| 399 |
+
---
|
| 400 |
+
|
| 401 |
+
# Graphen
|
| 402 |
+
|
| 403 |
+
Graphen bestehen aus:
|
| 404 |
+
|
| 405 |
+
- Knoten,
|
| 406 |
+
- Kanten.
|
| 407 |
+
|
| 408 |
+
Sie modellieren Beziehungen.
|
| 409 |
+
|
| 410 |
+
Beispiele:
|
| 411 |
+
|
| 412 |
+
- Straßennetze,
|
| 413 |
+
- soziale Netzwerke,
|
| 414 |
+
- Abhängigkeiten,
|
| 415 |
+
- Computernetze,
|
| 416 |
+
- Knowledge Graphs,
|
| 417 |
+
- Agentenbeziehungen.
|
| 418 |
+
|
| 419 |
+
Graphalgorithmen sind deshalb besonders wichtig.
|
| 420 |
+
|
| 421 |
+
---
|
| 422 |
+
|
| 423 |
+
# Laufzeitkomplexität
|
| 424 |
+
|
| 425 |
+
Die Laufzeitkomplexität beschreibt, wie der Rechenaufwand mit der Eingabegröße wächst.
|
| 426 |
+
|
| 427 |
+
Statt konkrete Millisekunden zu messen, betrachtet man häufig das Wachstum.
|
| 428 |
+
|
| 429 |
+
Beispiele:
|
| 430 |
+
|
| 431 |
+
- O(1)
|
| 432 |
+
- O(log n)
|
| 433 |
+
- O(n)
|
| 434 |
+
- O(n log n)
|
| 435 |
+
- O(n²)
|
| 436 |
+
- O(2^n)
|
| 437 |
+
|
| 438 |
+
---
|
| 439 |
+
|
| 440 |
+
# Big-O-Notation
|
| 441 |
+
|
| 442 |
+
Die Big-O-Notation beschreibt eine obere asymptotische Schranke.
|
| 443 |
+
|
| 444 |
+
Sie hilft zu beurteilen, wie ein Algorithmus bei großen Eingaben skaliert.
|
| 445 |
+
|
| 446 |
+
## O(1)
|
| 447 |
+
|
| 448 |
+
Konstanter Aufwand.
|
| 449 |
+
|
| 450 |
+
Beispiel:
|
| 451 |
+
|
| 452 |
+
Zugriff auf ein Array-Element über Index.
|
| 453 |
+
|
| 454 |
+
## O(log n)
|
| 455 |
+
|
| 456 |
+
Logarithmischer Aufwand.
|
| 457 |
+
|
| 458 |
+
Beispiel:
|
| 459 |
+
|
| 460 |
+
Binäre Suche.
|
| 461 |
+
|
| 462 |
+
## O(n)
|
| 463 |
+
|
| 464 |
+
Linearer Aufwand.
|
| 465 |
+
|
| 466 |
+
Beispiel:
|
| 467 |
+
|
| 468 |
+
Einmal durch eine Liste laufen.
|
| 469 |
+
|
| 470 |
+
## O(n log n)
|
| 471 |
+
|
| 472 |
+
Typisch für effiziente Vergleichssortierung.
|
| 473 |
+
|
| 474 |
+
## O(n²)
|
| 475 |
+
|
| 476 |
+
Quadratischer Aufwand.
|
| 477 |
+
|
| 478 |
+
Beispiel:
|
| 479 |
+
|
| 480 |
+
Doppelte Schleife über alle Elementpaare.
|
| 481 |
+
|
| 482 |
+
## O(2^n)
|
| 483 |
+
|
| 484 |
+
Exponentieller Aufwand.
|
| 485 |
+
|
| 486 |
+
Kann bei größeren n sehr schnell unpraktisch werden.
|
| 487 |
+
|
| 488 |
+
---
|
| 489 |
+
|
| 490 |
+
# Best Case, Average Case und Worst Case
|
| 491 |
+
|
| 492 |
+
Algorithmen können je nach Eingabe unterschiedlich lange benötigen.
|
| 493 |
+
|
| 494 |
+
## Best Case
|
| 495 |
+
|
| 496 |
+
Günstigste Eingabe.
|
| 497 |
+
|
| 498 |
+
## Average Case
|
| 499 |
+
|
| 500 |
+
Typischer durchschnittlicher Aufwand.
|
| 501 |
+
|
| 502 |
+
## Worst Case
|
| 503 |
+
|
| 504 |
+
Schlechtester möglicher Aufwand.
|
| 505 |
+
|
| 506 |
+
Für kritische Systeme ist der Worst Case häufig besonders relevant.
|
| 507 |
+
|
| 508 |
+
---
|
| 509 |
+
|
| 510 |
+
# Speicherkomplexität
|
| 511 |
+
|
| 512 |
+
Neben Laufzeit ist Speicherverbrauch wichtig.
|
| 513 |
+
|
| 514 |
+
Ein Algorithmus kann schnell sein, aber sehr viel Speicher benötigen.
|
| 515 |
+
|
| 516 |
+
Speicherkomplexität beschreibt, wie der Speicherbedarf mit der Eingabe wächst.
|
| 517 |
+
|
| 518 |
+
---
|
| 519 |
+
|
| 520 |
+
# Zeit-Speicher-Trade-off
|
| 521 |
+
|
| 522 |
+
Häufig lässt sich Zeit gegen Speicher tauschen.
|
| 523 |
+
|
| 524 |
+
Beispiel:
|
| 525 |
+
|
| 526 |
+
Ein Cache benötigt zusätzlichen Speicher, kann aber wiederholte Berechnungen vermeiden.
|
| 527 |
+
|
| 528 |
+
Solche Trade-offs sind zentral im Algorithm Engineering.
|
| 529 |
+
|
| 530 |
+
---
|
| 531 |
+
|
| 532 |
+
# Sortieralgorithmen
|
| 533 |
+
|
| 534 |
+
Sortieren ist ein klassisches Problem der Informatik.
|
| 535 |
+
|
| 536 |
+
Wichtige Verfahren:
|
| 537 |
+
|
| 538 |
+
- Bubble Sort,
|
| 539 |
+
- Insertion Sort,
|
| 540 |
+
- Selection Sort,
|
| 541 |
+
- Merge Sort,
|
| 542 |
+
- Quick Sort,
|
| 543 |
+
- Heap Sort.
|
| 544 |
+
|
| 545 |
+
---
|
| 546 |
+
|
| 547 |
+
# Bubble Sort
|
| 548 |
+
|
| 549 |
+
Bubble Sort vergleicht benachbarte Elemente und vertauscht sie bei falscher Reihenfolge.
|
| 550 |
+
|
| 551 |
+
Vorteile:
|
| 552 |
+
|
| 553 |
+
- einfach zu verstehen.
|
| 554 |
+
|
| 555 |
+
Nachteile:
|
| 556 |
+
|
| 557 |
+
- ineffizient für große Datenmengen.
|
| 558 |
+
|
| 559 |
+
Typische Laufzeit:
|
| 560 |
+
|
| 561 |
+
**O(n²)**
|
| 562 |
+
|
| 563 |
+
---
|
| 564 |
+
|
| 565 |
+
# Insertion Sort
|
| 566 |
+
|
| 567 |
+
Insertion Sort baut schrittweise eine sortierte Teilliste auf.
|
| 568 |
+
|
| 569 |
+
Vorteile:
|
| 570 |
+
|
| 571 |
+
- einfach,
|
| 572 |
+
- gut für kleine oder fast sortierte Daten.
|
| 573 |
+
|
| 574 |
+
Worst Case:
|
| 575 |
+
|
| 576 |
+
**O(n²)**
|
| 577 |
+
|
| 578 |
+
---
|
| 579 |
+
|
| 580 |
+
# Merge Sort
|
| 581 |
+
|
| 582 |
+
Merge Sort nutzt **Divide and Conquer**.
|
| 583 |
+
|
| 584 |
+
Ablauf:
|
| 585 |
+
|
| 586 |
+
1. Liste teilen.
|
| 587 |
+
2. Teilprobleme sortieren.
|
| 588 |
+
3. Ergebnisse zusammenführen.
|
| 589 |
+
|
| 590 |
+
Laufzeit:
|
| 591 |
+
|
| 592 |
+
**O(n log n)**
|
| 593 |
+
|
| 594 |
+
---
|
| 595 |
+
|
| 596 |
+
# Quick Sort
|
| 597 |
+
|
| 598 |
+
Quick Sort wählt ein Pivot-Element und partitioniert die Daten.
|
| 599 |
+
|
| 600 |
+
Durchschnittlich:
|
| 601 |
+
|
| 602 |
+
**O(n log n)**
|
| 603 |
+
|
| 604 |
+
Worst Case:
|
| 605 |
+
|
| 606 |
+
**O(n²)**
|
| 607 |
+
|
| 608 |
+
In der Praxis ist Quick Sort dennoch sehr effizient.
|
| 609 |
+
|
| 610 |
+
---
|
| 611 |
+
|
| 612 |
+
# Heap Sort
|
| 613 |
+
|
| 614 |
+
Heap Sort verwendet eine Heap-Datenstruktur.
|
| 615 |
+
|
| 616 |
+
Laufzeit:
|
| 617 |
+
|
| 618 |
+
**O(n log n)**
|
| 619 |
+
|
| 620 |
+
Es benötigt keine rekursive Merge-Struktur wie Merge Sort.
|
| 621 |
+
|
| 622 |
+
---
|
| 623 |
+
|
| 624 |
+
# Stabilität beim Sortieren
|
| 625 |
+
|
| 626 |
+
Ein Sortieralgorithmus ist **stabil**, wenn Elemente mit gleichem Schlüssel ihre relative Reihenfolge behalten.
|
| 627 |
+
|
| 628 |
+
Das kann wichtig sein, wenn bereits nach einem anderen Kriterium sortiert wurde.
|
| 629 |
+
|
| 630 |
+
---
|
| 631 |
+
|
| 632 |
+
# Suchalgorithmen
|
| 633 |
+
|
| 634 |
+
Suchalgorithmen finden Elemente oder Lösungen.
|
| 635 |
+
|
| 636 |
+
Typische Verfahren:
|
| 637 |
+
|
| 638 |
+
- lineare Suche,
|
| 639 |
+
- binäre Suche,
|
| 640 |
+
- Graphsuche,
|
| 641 |
+
- heuristische Suche.
|
| 642 |
+
|
| 643 |
+
---
|
| 644 |
+
|
| 645 |
+
# Lineare Suche
|
| 646 |
+
|
| 647 |
+
Die lineare Suche prüft Elemente der Reihe nach.
|
| 648 |
+
|
| 649 |
+
Laufzeit:
|
| 650 |
+
|
| 651 |
+
**O(n)**
|
| 652 |
+
|
| 653 |
+
Sie funktioniert auch bei unsortierten Daten.
|
| 654 |
+
|
| 655 |
+
---
|
| 656 |
+
|
| 657 |
+
# Binäre Suche
|
| 658 |
+
|
| 659 |
+
Die binäre Suche halbiert den Suchraum schrittweise.
|
| 660 |
+
|
| 661 |
+
Voraussetzung:
|
| 662 |
+
|
| 663 |
+
Die Daten sind sortiert.
|
| 664 |
+
|
| 665 |
+
Laufzeit:
|
| 666 |
+
|
| 667 |
+
**O(log n)**
|
| 668 |
+
|
| 669 |
+
Bei großen Datenmengen ist das deutlich effizienter als lineare Suche.
|
| 670 |
+
|
| 671 |
+
---
|
| 672 |
+
|
| 673 |
+
# Divide and Conquer
|
| 674 |
+
|
| 675 |
+
Divide and Conquer zerlegt ein Problem in kleinere Teilprobleme.
|
| 676 |
+
|
| 677 |
+
Typischer Ablauf:
|
| 678 |
+
|
| 679 |
+
1. Problem teilen.
|
| 680 |
+
2. Teilprobleme lösen.
|
| 681 |
+
3. Lösungen kombinieren.
|
| 682 |
+
|
| 683 |
+
Beispiele:
|
| 684 |
+
|
| 685 |
+
- Merge Sort,
|
| 686 |
+
- Quick Sort,
|
| 687 |
+
- Binary Search.
|
| 688 |
+
|
| 689 |
+
---
|
| 690 |
+
|
| 691 |
+
# Dynamic Programming
|
| 692 |
+
|
| 693 |
+
Dynamic Programming eignet sich für Probleme mit wiederkehrenden Teilproblemen.
|
| 694 |
+
|
| 695 |
+
Statt dieselben Teilprobleme mehrfach zu berechnen, werden Ergebnisse gespeichert.
|
| 696 |
+
|
| 697 |
+
Typische Strategien:
|
| 698 |
+
|
| 699 |
+
- Memoization,
|
| 700 |
+
- Tabulation.
|
| 701 |
+
|
| 702 |
+
Anwendungen:
|
| 703 |
+
|
| 704 |
+
- kürzeste Pfade,
|
| 705 |
+
- Sequenzprobleme,
|
| 706 |
+
- Optimierung,
|
| 707 |
+
- Ressourcenplanung.
|
| 708 |
+
|
| 709 |
+
---
|
| 710 |
+
|
| 711 |
+
# Greedy Algorithms
|
| 712 |
+
|
| 713 |
+
Greedy Algorithms treffen lokal jeweils die scheinbar beste Entscheidung.
|
| 714 |
+
|
| 715 |
+
Vorteil:
|
| 716 |
+
|
| 717 |
+
- häufig einfach und schnell.
|
| 718 |
+
|
| 719 |
+
Nachteil:
|
| 720 |
+
|
| 721 |
+
- lokale Optima führen nicht immer zum globalen Optimum.
|
| 722 |
+
|
| 723 |
+
Beispiele:
|
| 724 |
+
|
| 725 |
+
- bestimmte Scheduling-Probleme,
|
| 726 |
+
- Huffman Coding,
|
| 727 |
+
- Minimum Spanning Tree.
|
| 728 |
+
|
| 729 |
+
---
|
| 730 |
+
|
| 731 |
+
# Backtracking
|
| 732 |
+
|
| 733 |
+
Backtracking probiert Lösungsmöglichkeiten aus und verwirft Pfade, die nicht funktionieren.
|
| 734 |
+
|
| 735 |
+
Anwendungen:
|
| 736 |
+
|
| 737 |
+
- Sudoku,
|
| 738 |
+
- N-Queens,
|
| 739 |
+
- Constraint Satisfaction,
|
| 740 |
+
- kombinatorische Suche.
|
| 741 |
+
|
| 742 |
+
Backtracking kann teuer werden, ist aber für viele Suchprobleme sehr nützlich.
|
| 743 |
+
|
| 744 |
+
---
|
| 745 |
+
|
| 746 |
+
# Branch and Bound
|
| 747 |
+
|
| 748 |
+
Branch and Bound verbessert systematische Suche durch Schranken.
|
| 749 |
+
|
| 750 |
+
Teilbereiche werden verworfen, wenn klar ist, dass sie keine bessere Lösung liefern können.
|
| 751 |
+
|
| 752 |
+
Anwendungen:
|
| 753 |
+
|
| 754 |
+
- kombinatorische Optimierung,
|
| 755 |
+
- Scheduling,
|
| 756 |
+
- Integer Programming.
|
| 757 |
+
|
| 758 |
+
---
|
| 759 |
+
|
| 760 |
+
# Rekursion
|
| 761 |
+
|
| 762 |
+
Rekursion bedeutet, dass eine Funktion sich selbst aufruft.
|
| 763 |
+
|
| 764 |
+
Typisch bei:
|
| 765 |
+
|
| 766 |
+
- Trees,
|
| 767 |
+
- Divide and Conquer,
|
| 768 |
+
- Backtracking.
|
| 769 |
+
|
| 770 |
+
Rekursion kann elegante Lösungen ermöglichen, benötigt aber Kontrolle über:
|
| 771 |
+
|
| 772 |
+
- Abbruchbedingung,
|
| 773 |
+
- Stack-Tiefe,
|
| 774 |
+
- Laufzeit.
|
| 775 |
+
|
| 776 |
+
---
|
| 777 |
+
|
| 778 |
+
# Iteration
|
| 779 |
+
|
| 780 |
+
Iteration wiederholt Schritte über Schleifen.
|
| 781 |
+
|
| 782 |
+
Viele rekursive Algorithmen können auch iterativ formuliert werden.
|
| 783 |
+
|
| 784 |
+
Die Wahl hängt ab von:
|
| 785 |
+
|
| 786 |
+
- Lesbarkeit,
|
| 787 |
+
- Speicher,
|
| 788 |
+
- Laufzeit,
|
| 789 |
+
- Problemstruktur.
|
| 790 |
+
|
| 791 |
+
---
|
| 792 |
+
|
| 793 |
+
# Graphalgorithmen
|
| 794 |
+
|
| 795 |
+
Graphen sind zentral für viele moderne Systeme.
|
| 796 |
+
|
| 797 |
+
Wichtige Graphalgorithmen:
|
| 798 |
+
|
| 799 |
+
- Breadth-First Search,
|
| 800 |
+
- Depth-First Search,
|
| 801 |
+
- Dijkstra,
|
| 802 |
+
- A*,
|
| 803 |
+
- Bellman-Ford,
|
| 804 |
+
- Floyd-Warshall,
|
| 805 |
+
- Kruskal,
|
| 806 |
+
- Prim,
|
| 807 |
+
- Topological Sort.
|
| 808 |
+
|
| 809 |
+
---
|
| 810 |
+
|
| 811 |
+
# Breadth-First Search
|
| 812 |
+
|
| 813 |
+
BFS durchsucht einen Graphen schichtweise.
|
| 814 |
+
|
| 815 |
+
Typische Anwendungen:
|
| 816 |
+
|
| 817 |
+
- kürzester Pfad in ungewichteten Graphen,
|
| 818 |
+
- Netzwerkreichweite,
|
| 819 |
+
- Web Crawling.
|
| 820 |
+
|
| 821 |
+
BFS verwendet typischerweise eine Queue.
|
| 822 |
+
|
| 823 |
+
---
|
| 824 |
+
|
| 825 |
+
# Depth-First Search
|
| 826 |
+
|
| 827 |
+
DFS verfolgt einen Pfad möglichst tief, bevor zurückgegangen wird.
|
| 828 |
+
|
| 829 |
+
Anwendungen:
|
| 830 |
+
|
| 831 |
+
- Zyklenerkennung,
|
| 832 |
+
- Topological Sort,
|
| 833 |
+
- Connected Components,
|
| 834 |
+
- Backtracking.
|
| 835 |
+
|
| 836 |
+
DFS verwendet häufig einen Stack oder Rekursion.
|
| 837 |
+
|
| 838 |
+
---
|
| 839 |
+
|
| 840 |
+
# Dijkstra
|
| 841 |
+
|
| 842 |
+
Dijkstra berechnet kürzeste Wege in Graphen mit nicht-negativen Kantengewichten.
|
| 843 |
+
|
| 844 |
+
Anwendungen:
|
| 845 |
+
|
| 846 |
+
- Routing,
|
| 847 |
+
- Netzwerkplanung,
|
| 848 |
+
- Navigation.
|
| 849 |
+
|
| 850 |
+
Mit Priority Queue kann Dijkstra effizient implementiert werden.
|
| 851 |
+
|
| 852 |
+
---
|
| 853 |
+
|
| 854 |
+
# A*
|
| 855 |
+
|
| 856 |
+
A* erweitert Pfadsuche um eine Heuristik.
|
| 857 |
+
|
| 858 |
+
Die Heuristik schätzt die verbleibenden Kosten zum Ziel.
|
| 859 |
+
|
| 860 |
+
A* ist besonders wichtig in:
|
| 861 |
+
|
| 862 |
+
- Navigation,
|
| 863 |
+
- Games,
|
| 864 |
+
- Robotik,
|
| 865 |
+
- Planning.
|
| 866 |
+
|
| 867 |
+
---
|
| 868 |
+
|
| 869 |
+
# Bellman-Ford
|
| 870 |
+
|
| 871 |
+
Bellman-Ford kann kürzeste Wege auch bei negativen Kantengewichten berechnen.
|
| 872 |
+
|
| 873 |
+
Es kann außerdem negative Zyklen erkennen.
|
| 874 |
+
|
| 875 |
+
---
|
| 876 |
+
|
| 877 |
+
# Minimum Spanning Tree
|
| 878 |
+
|
| 879 |
+
Ein Minimum Spanning Tree verbindet alle Knoten eines gewichteten Graphen mit minimalen Gesamtkosten.
|
| 880 |
+
|
| 881 |
+
Wichtige Algorithmen:
|
| 882 |
+
|
| 883 |
+
- Kruskal,
|
| 884 |
+
- Prim.
|
| 885 |
+
|
| 886 |
+
Anwendungen:
|
| 887 |
+
|
| 888 |
+
- Netzdesign,
|
| 889 |
+
- Infrastrukturplanung,
|
| 890 |
+
- Clustering.
|
| 891 |
+
|
| 892 |
+
---
|
| 893 |
+
|
| 894 |
+
# Topological Sort
|
| 895 |
+
|
| 896 |
+
Topological Sort erzeugt eine Reihenfolge für gerichtete azyklische Graphen.
|
| 897 |
+
|
| 898 |
+
Anwendungen:
|
| 899 |
+
|
| 900 |
+
- Build-Systeme,
|
| 901 |
+
- Abhängigkeiten,
|
| 902 |
+
- Workflow-Orchestrierung,
|
| 903 |
+
- Scheduling.
|
| 904 |
+
|
| 905 |
+
---
|
| 906 |
+
|
| 907 |
+
# Optimierungsalgorithmen
|
| 908 |
+
|
| 909 |
+
Optimierungsalgorithmen suchen die beste Lösung unter gegebenen Bedingungen.
|
| 910 |
+
|
| 911 |
+
Ziele können sein:
|
| 912 |
+
|
| 913 |
+
- Kosten minimieren,
|
| 914 |
+
- Gewinn maximieren,
|
| 915 |
+
- Weg verkürzen,
|
| 916 |
+
- Ressourcen optimal verteilen.
|
| 917 |
+
|
| 918 |
+
---
|
| 919 |
+
|
| 920 |
+
# Lineare Optimierung
|
| 921 |
+
|
| 922 |
+
Lineare Optimierung arbeitet mit linearen Zielfunktionen und Nebenbedingungen.
|
| 923 |
+
|
| 924 |
+
Anwendungen:
|
| 925 |
+
|
| 926 |
+
- Logistik,
|
| 927 |
+
- Produktionsplanung,
|
| 928 |
+
- Ressourcenallokation.
|
| 929 |
+
|
| 930 |
+
---
|
| 931 |
+
|
| 932 |
+
# Ganzzahlige Optimierung
|
| 933 |
+
|
| 934 |
+
Integer Programming verlangt ganzzahlige Variablen.
|
| 935 |
+
|
| 936 |
+
Typisch bei:
|
| 937 |
+
|
| 938 |
+
- Auswahlproblemen,
|
| 939 |
+
- Scheduling,
|
| 940 |
+
- Routenplanung.
|
| 941 |
+
|
| 942 |
+
Diese Probleme können deutlich schwieriger sein als lineare Programme.
|
| 943 |
+
|
| 944 |
+
---
|
| 945 |
+
|
| 946 |
+
# Gradientenverfahren
|
| 947 |
+
|
| 948 |
+
Gradientenverfahren optimieren eine Zielfunktion schrittweise.
|
| 949 |
+
|
| 950 |
+
Ein wichtiges Beispiel ist **Gradient Descent**.
|
| 951 |
+
|
| 952 |
+
Gradient Descent ist eine zentrale Grundlage für das Training neuronaler Netze.
|
| 953 |
+
|
| 954 |
+
---
|
| 955 |
+
|
| 956 |
+
# Stochastic Gradient Descent
|
| 957 |
+
|
| 958 |
+
SGD verwendet Teilmengen der Daten.
|
| 959 |
+
|
| 960 |
+
Vorteile:
|
| 961 |
+
|
| 962 |
+
- skalierbarer bei großen Datenmengen,
|
| 963 |
+
- häufig schneller pro Schritt.
|
| 964 |
+
|
| 965 |
+
Varianten:
|
| 966 |
+
|
| 967 |
+
- Mini-Batch SGD,
|
| 968 |
+
- Momentum,
|
| 969 |
+
- Adam.
|
| 970 |
+
|
| 971 |
+
---
|
| 972 |
+
|
| 973 |
+
# Randomisierte Algorithmen
|
| 974 |
+
|
| 975 |
+
Randomisierte Algorithmen verwenden Zufall als Teil ihrer Strategie.
|
| 976 |
+
|
| 977 |
+
Vorteile:
|
| 978 |
+
|
| 979 |
+
- einfache Lösungen,
|
| 980 |
+
- gute durchschnittliche Performance,
|
| 981 |
+
- Robustheit gegen bestimmte Eingaben.
|
| 982 |
+
|
| 983 |
+
Beispiele:
|
| 984 |
+
|
| 985 |
+
- randomized Quick Sort,
|
| 986 |
+
- Monte-Carlo-Verfahren,
|
| 987 |
+
- Sampling.
|
| 988 |
+
|
| 989 |
+
---
|
| 990 |
+
|
| 991 |
+
# Monte-Carlo-Verfahren
|
| 992 |
+
|
| 993 |
+
Monte-Carlo-Verfahren nutzen Zufallsstichproben.
|
| 994 |
+
|
| 995 |
+
Anwendungen:
|
| 996 |
+
|
| 997 |
+
- Simulation,
|
| 998 |
+
- Risikoanalyse,
|
| 999 |
+
- numerische Integration,
|
| 1000 |
+
- Bayesianische Methoden.
|
| 1001 |
+
|
| 1002 |
+
---
|
| 1003 |
+
|
| 1004 |
+
# Approximation Algorithms
|
| 1005 |
+
|
| 1006 |
+
Einige Optimierungsprobleme sind so schwierig, dass exakte Lösungen für große Eingaben unpraktisch sind.
|
| 1007 |
+
|
| 1008 |
+
Approximation Algorithms liefern Lösungen mit garantierter Nähe zum Optimum.
|
| 1009 |
+
|
| 1010 |
+
Sie sind besonders wichtig für kombinatorische Optimierung.
|
| 1011 |
+
|
| 1012 |
+
---
|
| 1013 |
+
|
| 1014 |
+
# Heuristische Optimierung
|
| 1015 |
+
|
| 1016 |
+
Heuristiken suchen gute Lösungen ohne Garantie auf das globale Optimum.
|
| 1017 |
+
|
| 1018 |
+
Beispiele:
|
| 1019 |
+
|
| 1020 |
+
- Genetic Algorithms,
|
| 1021 |
+
- Simulated Annealing,
|
| 1022 |
+
- Tabu Search.
|
| 1023 |
+
|
| 1024 |
+
Sie werden häufig genutzt, wenn der Suchraum extrem groß ist.
|
| 1025 |
+
|
| 1026 |
+
---
|
| 1027 |
+
|
| 1028 |
+
# Algorithmen in Datenbanken
|
| 1029 |
+
|
| 1030 |
+
Datenbanken verwenden Algorithmen für:
|
| 1031 |
+
|
| 1032 |
+
- Indexierung,
|
| 1033 |
+
- Sortierung,
|
| 1034 |
+
- Join Planning,
|
| 1035 |
+
- Query Optimization,
|
| 1036 |
+
- Caching.
|
| 1037 |
+
|
| 1038 |
+
Die Wahl des Query Plans kann große Auswirkungen auf Performance haben.
|
| 1039 |
+
|
| 1040 |
+
---
|
| 1041 |
+
|
| 1042 |
+
# Algorithmen in Suchmaschinen
|
| 1043 |
+
|
| 1044 |
+
Suchmaschinen kombinieren viele Verfahren:
|
| 1045 |
+
|
| 1046 |
+
- Crawling,
|
| 1047 |
+
- Indexierung,
|
| 1048 |
+
- Ranking,
|
| 1049 |
+
- Retrieval,
|
| 1050 |
+
- deduplication,
|
| 1051 |
+
- semantische Suche.
|
| 1052 |
+
|
| 1053 |
+
Moderne Suchsysteme kombinieren klassische Algorithmen mit Machine Learning und Embeddings.
|
| 1054 |
+
|
| 1055 |
+
---
|
| 1056 |
+
|
| 1057 |
+
# Algorithmen in Empfehlungssystemen
|
| 1058 |
+
|
| 1059 |
+
Empfehlungssysteme verwenden unter anderem:
|
| 1060 |
+
|
| 1061 |
+
- Collaborative Filtering,
|
| 1062 |
+
- Content-Based Filtering,
|
| 1063 |
+
- Matrix Factorization,
|
| 1064 |
+
- Ranking,
|
| 1065 |
+
- Deep Learning.
|
| 1066 |
+
|
| 1067 |
+
Sie optimieren häufig nicht nur auf Klicks, sondern auf mehrere Zielgrößen.
|
| 1068 |
+
|
| 1069 |
+
---
|
| 1070 |
+
|
| 1071 |
+
# Machine-Learning-Algorithmen
|
| 1072 |
+
|
| 1073 |
+
Machine Learning umfasst viele Algorithmen.
|
| 1074 |
+
|
| 1075 |
+
Beispiele:
|
| 1076 |
+
|
| 1077 |
+
- Linear Regression,
|
| 1078 |
+
- Logistic Regression,
|
| 1079 |
+
- Decision Trees,
|
| 1080 |
+
- Random Forest,
|
| 1081 |
+
- Gradient Boosting,
|
| 1082 |
+
- Support Vector Machines,
|
| 1083 |
+
- k-Nearest Neighbors,
|
| 1084 |
+
- k-Means,
|
| 1085 |
+
- Neural Networks.
|
| 1086 |
+
|
| 1087 |
+
---
|
| 1088 |
+
|
| 1089 |
+
# Entscheidungsbäume
|
| 1090 |
+
|
| 1091 |
+
Decision Trees treffen Entscheidungen über aufeinanderfolgende Regeln.
|
| 1092 |
+
|
| 1093 |
+
Vorteile:
|
| 1094 |
+
|
| 1095 |
+
- gut interpretierbar,
|
| 1096 |
+
- funktionieren für numerische und kategorische Daten.
|
| 1097 |
+
|
| 1098 |
+
Nachteile:
|
| 1099 |
+
|
| 1100 |
+
- können overfitten.
|
| 1101 |
+
|
| 1102 |
+
---
|
| 1103 |
+
|
| 1104 |
+
# Random Forest
|
| 1105 |
+
|
| 1106 |
+
Random Forest kombiniert viele Entscheidungsbäume.
|
| 1107 |
+
|
| 1108 |
+
Vorteile:
|
| 1109 |
+
|
| 1110 |
+
- robust,
|
| 1111 |
+
- gute Baseline für viele tabellarische Probleme.
|
| 1112 |
+
|
| 1113 |
+
---
|
| 1114 |
+
|
| 1115 |
+
# Gradient Boosting
|
| 1116 |
+
|
| 1117 |
+
Gradient Boosting baut Modelle schrittweise auf.
|
| 1118 |
+
|
| 1119 |
+
Bekannte Varianten:
|
| 1120 |
+
|
| 1121 |
+
- XGBoost,
|
| 1122 |
+
- LightGBM,
|
| 1123 |
+
- CatBoost.
|
| 1124 |
+
|
| 1125 |
+
Sie sind besonders stark bei strukturierten tabellarischen Daten.
|
| 1126 |
+
|
| 1127 |
+
---
|
| 1128 |
+
|
| 1129 |
+
# k-Nearest Neighbors
|
| 1130 |
+
|
| 1131 |
+
k-NN klassifiziert oder schätzt anhand ähnlicher Beispiele.
|
| 1132 |
+
|
| 1133 |
+
Vorteile:
|
| 1134 |
+
|
| 1135 |
+
- einfach,
|
| 1136 |
+
- keine komplexe Trainingsphase.
|
| 1137 |
+
|
| 1138 |
+
Nachteile:
|
| 1139 |
+
|
| 1140 |
+
- kann bei großen Datenmengen teuer werden.
|
| 1141 |
+
|
| 1142 |
+
---
|
| 1143 |
+
|
| 1144 |
+
# k-Means
|
| 1145 |
+
|
| 1146 |
+
k-Means ist ein Clustering-Algorithmus.
|
| 1147 |
+
|
| 1148 |
+
Er teilt Daten in k Cluster.
|
| 1149 |
+
|
| 1150 |
+
Der Algorithmus optimiert die Abstände zu Clusterzentren.
|
| 1151 |
+
|
| 1152 |
+
---
|
| 1153 |
+
|
| 1154 |
+
# Neuronale Netze
|
| 1155 |
+
|
| 1156 |
+
Neuronale Netze bestehen aus vielen parametrisierten Recheneinheiten.
|
| 1157 |
+
|
| 1158 |
+
Training erfolgt typischerweise über:
|
| 1159 |
+
|
| 1160 |
+
- Forward Pass,
|
| 1161 |
+
- Loss,
|
| 1162 |
+
- Backpropagation,
|
| 1163 |
+
- Optimizer.
|
| 1164 |
+
|
| 1165 |
+
---
|
| 1166 |
+
|
| 1167 |
+
# Backpropagation
|
| 1168 |
+
|
| 1169 |
+
Backpropagation berechnet, wie stark einzelne Parameter zum Fehler beitragen.
|
| 1170 |
+
|
| 1171 |
+
Diese Gradienten werden genutzt, um Modellgewichte anzupassen.
|
| 1172 |
+
|
| 1173 |
+
Backpropagation ist eine zentrale Grundlage moderner Deep-Learning-Systeme.
|
| 1174 |
+
|
| 1175 |
+
---
|
| 1176 |
+
|
| 1177 |
+
# Attention
|
| 1178 |
+
|
| 1179 |
+
Attention berechnet, welche Teile einer Eingabe für eine bestimmte Verarbeitung besonders relevant sind.
|
| 1180 |
+
|
| 1181 |
+
Self-Attention ist ein Kernbestandteil von Transformer-Modellen.
|
| 1182 |
+
|
| 1183 |
+
---
|
| 1184 |
+
|
| 1185 |
+
# Transformer als Algorithmussystem
|
| 1186 |
+
|
| 1187 |
+
Transformer sind keine einzelne einfache Prozedur.
|
| 1188 |
+
|
| 1189 |
+
Sie kombinieren mehrere algorithmische Bausteine:
|
| 1190 |
+
|
| 1191 |
+
- Tokenisierung,
|
| 1192 |
+
- Embeddings,
|
| 1193 |
+
- Attention,
|
| 1194 |
+
- Matrixoperationen,
|
| 1195 |
+
- Normalisierung,
|
| 1196 |
+
- Sampling.
|
| 1197 |
+
|
| 1198 |
+
Große Sprachmodelle bauen auf diesen Mechanismen auf.
|
| 1199 |
+
|
| 1200 |
+
---
|
| 1201 |
+
|
| 1202 |
+
# Algorithmen in Generativer KI
|
| 1203 |
+
|
| 1204 |
+
Generative KI nutzt Algorithmen für:
|
| 1205 |
+
|
| 1206 |
+
- Token Sampling,
|
| 1207 |
+
- Decoding,
|
| 1208 |
+
- Beam Search,
|
| 1209 |
+
- Temperature,
|
| 1210 |
+
- Top-k Sampling,
|
| 1211 |
+
- Top-p Sampling.
|
| 1212 |
+
|
| 1213 |
+
Diese Verfahren beeinflussen, wie ein Modell seine Ausgabe erzeugt.
|
| 1214 |
+
|
| 1215 |
+
---
|
| 1216 |
+
|
| 1217 |
+
# Greedy Decoding
|
| 1218 |
+
|
| 1219 |
+
Greedy Decoding wählt jeweils das wahrscheinlichste nächste Token.
|
| 1220 |
+
|
| 1221 |
+
Vorteil:
|
| 1222 |
+
|
| 1223 |
+
- deterministisch und einfach.
|
| 1224 |
+
|
| 1225 |
+
Nachteil:
|
| 1226 |
+
|
| 1227 |
+
- kann zu weniger vielfältigen Ausgaben führen.
|
| 1228 |
+
|
| 1229 |
+
---
|
| 1230 |
+
|
| 1231 |
+
# Beam Search
|
| 1232 |
+
|
| 1233 |
+
Beam Search hält mehrere Kandidaten gleichzeitig.
|
| 1234 |
+
|
| 1235 |
+
Er wird häufig bei Sequenzaufgaben eingesetzt.
|
| 1236 |
+
|
| 1237 |
+
---
|
| 1238 |
+
|
| 1239 |
+
# Top-k Sampling
|
| 1240 |
+
|
| 1241 |
+
Top-k betrachtet nur die k wahrscheinlichsten Tokens.
|
| 1242 |
+
|
| 1243 |
+
Dadurch wird die Auswahl eingeschränkt.
|
| 1244 |
+
|
| 1245 |
+
---
|
| 1246 |
+
|
| 1247 |
+
# Top-p Sampling
|
| 1248 |
+
|
| 1249 |
+
Top-p, auch Nucleus Sampling, betrachtet die kleinste Tokenmenge, deren kumulierte Wahrscheinlichkeit einen Schwellenwert erreicht.
|
| 1250 |
+
|
| 1251 |
+
Das ermöglicht dynamischere Auswahl als ein fixes k.
|
| 1252 |
+
|
| 1253 |
+
---
|
| 1254 |
+
|
| 1255 |
+
# Algorithmen in RAG
|
| 1256 |
+
|
| 1257 |
+
Retrieval-Augmented Generation nutzt algorithmische Komponenten für:
|
| 1258 |
+
|
| 1259 |
+
- Chunking,
|
| 1260 |
+
- Embeddings,
|
| 1261 |
+
- Similarity Search,
|
| 1262 |
+
- Reranking,
|
| 1263 |
+
- Context Selection.
|
| 1264 |
+
|
| 1265 |
+
Die Qualität eines RAG-Systems hängt stark von diesen Verfahren ab.
|
| 1266 |
+
|
| 1267 |
+
---
|
| 1268 |
+
|
| 1269 |
+
# Similarity Search
|
| 1270 |
+
|
| 1271 |
+
Semantische Suche verwendet häufig:
|
| 1272 |
+
|
| 1273 |
+
- Cosine Similarity,
|
| 1274 |
+
- Dot Product,
|
| 1275 |
+
- Euclidean Distance.
|
| 1276 |
+
|
| 1277 |
+
Diese Maße vergleichen Vektoren.
|
| 1278 |
+
|
| 1279 |
+
---
|
| 1280 |
+
|
| 1281 |
+
# Approximate Nearest Neighbor
|
| 1282 |
+
|
| 1283 |
+
Bei sehr großen Vektormengen ist exakte Suche teuer.
|
| 1284 |
+
|
| 1285 |
+
ANN-Verfahren liefern sehr ähnliche Nachbarn deutlich schneller.
|
| 1286 |
+
|
| 1287 |
+
Beispiele:
|
| 1288 |
+
|
| 1289 |
+
- HNSW,
|
| 1290 |
+
- IVF,
|
| 1291 |
+
- Product Quantization.
|
| 1292 |
+
|
| 1293 |
+
---
|
| 1294 |
+
|
| 1295 |
+
# Algorithmen in KI-Agenten
|
| 1296 |
+
|
| 1297 |
+
KI-Agenten benötigen algorithmische Strukturen für:
|
| 1298 |
+
|
| 1299 |
+
- Planning,
|
| 1300 |
+
- Routing,
|
| 1301 |
+
- Tool Selection,
|
| 1302 |
+
- Memory,
|
| 1303 |
+
- State Management,
|
| 1304 |
+
- Search,
|
| 1305 |
+
- Scheduling,
|
| 1306 |
+
- Evaluation.
|
| 1307 |
+
|
| 1308 |
+
Agenten sind damit ein gutes Beispiel dafür, wie klassische Algorithmen und moderne KI zusammenkommen.
|
| 1309 |
+
|
| 1310 |
+
---
|
| 1311 |
+
|
| 1312 |
+
# Planning
|
| 1313 |
+
|
| 1314 |
+
Planning sucht nach einer Folge von Aktionen, die ein Ziel erreicht.
|
| 1315 |
+
|
| 1316 |
+
Klassische KI nutzt hierfür unter anderem:
|
| 1317 |
+
|
| 1318 |
+
- State Space Search,
|
| 1319 |
+
- Heuristics,
|
| 1320 |
+
- A*,
|
| 1321 |
+
- Constraint Solving.
|
| 1322 |
+
|
| 1323 |
+
Moderne Agenten kombinieren solche Prinzipien mit Sprachmodellen.
|
| 1324 |
+
|
| 1325 |
+
---
|
| 1326 |
+
|
| 1327 |
+
# Routing
|
| 1328 |
+
|
| 1329 |
+
Routing wählt die passende Komponente.
|
| 1330 |
+
|
| 1331 |
+
Beispiele:
|
| 1332 |
+
|
| 1333 |
+
- Modell,
|
| 1334 |
+
- Tool,
|
| 1335 |
+
- Agent,
|
| 1336 |
+
- Datenquelle.
|
| 1337 |
+
|
| 1338 |
+
Routing kann regelbasiert, statistisch oder modellgestützt erfolgen.
|
| 1339 |
+
|
| 1340 |
+
---
|
| 1341 |
+
|
| 1342 |
+
# Scheduling
|
| 1343 |
+
|
| 1344 |
+
Scheduling bestimmt, wann und in welcher Reihenfolge Aufgaben ausgeführt werden.
|
| 1345 |
+
|
| 1346 |
+
Anwendungen:
|
| 1347 |
+
|
| 1348 |
+
- Betriebssysteme,
|
| 1349 |
+
- Cloud Computing,
|
| 1350 |
+
- Produktionsplanung,
|
| 1351 |
+
- Agentenorchestrierung.
|
| 1352 |
+
|
| 1353 |
+
---
|
| 1354 |
+
|
| 1355 |
+
# Reinforcement Learning
|
| 1356 |
+
|
| 1357 |
+
Reinforcement Learning optimiert Entscheidungen über Belohnungssignale.
|
| 1358 |
+
|
| 1359 |
+
Ein Agent beobachtet:
|
| 1360 |
+
|
| 1361 |
+
- Zustand,
|
| 1362 |
+
- Aktion,
|
| 1363 |
+
- Reward,
|
| 1364 |
+
- nächsten Zustand.
|
| 1365 |
+
|
| 1366 |
+
Ziel ist eine Strategie, die langfristig hohe Belohnung erzielt.
|
| 1367 |
+
|
| 1368 |
+
---
|
| 1369 |
+
|
| 1370 |
+
# Exploration vs. Exploitation
|
| 1371 |
+
|
| 1372 |
+
Reinforcement Learning muss zwischen zwei Strategien abwägen:
|
| 1373 |
+
|
| 1374 |
+
## Exploration
|
| 1375 |
+
|
| 1376 |
+
Neue Aktionen ausprobieren.
|
| 1377 |
+
|
| 1378 |
+
## Exploitation
|
| 1379 |
+
|
| 1380 |
+
Bekannte gute Aktionen nutzen.
|
| 1381 |
+
|
| 1382 |
+
Dieser Trade-off ist ein zentrales algorithmisches Problem.
|
| 1383 |
+
|
| 1384 |
+
---
|
| 1385 |
+
|
| 1386 |
+
# Algorithmen und AGI
|
| 1387 |
+
|
| 1388 |
+
Auch zukünftige allgemeinere KI-Systeme werden algorithmische Mechanismen benötigen.
|
| 1389 |
+
|
| 1390 |
+
Mögliche Bereiche:
|
| 1391 |
+
|
| 1392 |
+
- Planung,
|
| 1393 |
+
- Suche,
|
| 1394 |
+
- Memory,
|
| 1395 |
+
- Tool Use,
|
| 1396 |
+
- Ressourcenallokation,
|
| 1397 |
+
- Selbstoptimierung,
|
| 1398 |
+
- Multi-Agent-Koordination.
|
| 1399 |
+
|
| 1400 |
+
Der Begriff Algorithmus verliert durch leistungsfähigere KI deshalb nicht an Bedeutung.
|
| 1401 |
+
|
| 1402 |
+
Im Gegenteil: Je komplexer KI-Systeme werden, desto wichtiger werden algorithmische Kontrolle, Effizienz und Verifikation.
|
| 1403 |
+
|
| 1404 |
+
---
|
| 1405 |
+
|
| 1406 |
+
# Algorithm Engineering
|
| 1407 |
+
|
| 1408 |
+
Algorithm Engineering verbindet Theorie und praktische Umsetzung.
|
| 1409 |
+
|
| 1410 |
+
Ein theoretisch guter Algorithmus kann in realer Software schlechter sein, wenn:
|
| 1411 |
+
|
| 1412 |
+
- Speicherzugriffe ungünstig sind,
|
| 1413 |
+
- Parallelisierung fehlt,
|
| 1414 |
+
- Datenstruktur nicht passt,
|
| 1415 |
+
- Cache-Verhalten schlecht ist.
|
| 1416 |
+
|
| 1417 |
+
Praktische Performance hängt deshalb auch von Implementierungsdetails ab.
|
| 1418 |
+
|
| 1419 |
+
---
|
| 1420 |
+
|
| 1421 |
+
# Parallel Algorithms
|
| 1422 |
+
|
| 1423 |
+
Parallel Algorithms verteilen Arbeit auf mehrere Recheneinheiten.
|
| 1424 |
+
|
| 1425 |
+
Anwendungen:
|
| 1426 |
+
|
| 1427 |
+
- GPUs,
|
| 1428 |
+
- Multicore CPUs,
|
| 1429 |
+
- Distributed Systems.
|
| 1430 |
+
|
| 1431 |
+
Wichtige Fragen:
|
| 1432 |
+
|
| 1433 |
+
- Welche Schritte sind unabhängig?
|
| 1434 |
+
- Wie hoch ist Synchronisationsaufwand?
|
| 1435 |
+
- Wie werden Daten verteilt?
|
| 1436 |
+
|
| 1437 |
+
---
|
| 1438 |
+
|
| 1439 |
+
# Distributed Algorithms
|
| 1440 |
+
|
| 1441 |
+
Verteilte Algorithmen laufen auf mehreren Systemen.
|
| 1442 |
+
|
| 1443 |
+
Themen:
|
| 1444 |
+
|
| 1445 |
+
- Konsens,
|
| 1446 |
+
- Replikation,
|
| 1447 |
+
- Fehlertoleranz,
|
| 1448 |
+
- Leader Election,
|
| 1449 |
+
- verteilte Locks.
|
| 1450 |
+
|
| 1451 |
+
Sie sind zentral für Cloud- und Datenbanksysteme.
|
| 1452 |
+
|
| 1453 |
+
---
|
| 1454 |
+
|
| 1455 |
+
# Algorithmen und Skalierbarkeit
|
| 1456 |
+
|
| 1457 |
+
Ein Algorithmus kann funktional korrekt und trotzdem nicht skalierbar sein.
|
| 1458 |
+
|
| 1459 |
+
Skalierbarkeit hängt ab von:
|
| 1460 |
+
|
| 1461 |
+
- Laufzeit,
|
| 1462 |
+
- Speicher,
|
| 1463 |
+
- Parallelisierung,
|
| 1464 |
+
- Netzwerk,
|
| 1465 |
+
- Datenvolumen.
|
| 1466 |
+
|
| 1467 |
+
Deshalb sollten Algorithmen immer im Kontext realer Systemgrenzen bewertet werden.
|
| 1468 |
+
|
| 1469 |
+
---
|
| 1470 |
+
|
| 1471 |
+
# Häufige Fehler beim Algorithmusdesign
|
| 1472 |
+
|
| 1473 |
+
## Zu früh optimieren
|
| 1474 |
+
|
| 1475 |
+
Eine komplexe Optimierung ist nicht sinnvoll, wenn das Problem noch unklar ist.
|
| 1476 |
+
|
| 1477 |
+
## Falsche Datenstruktur
|
| 1478 |
+
|
| 1479 |
+
Ein guter Algorithmus kann durch eine ungeeignete Datenstruktur ausgebremst werden.
|
| 1480 |
+
|
| 1481 |
+
## Randfälle ignorieren
|
| 1482 |
+
|
| 1483 |
+
Leere Listen, doppelte Werte oder ungültige Eingaben müssen berücksichtigt werden.
|
| 1484 |
+
|
| 1485 |
+
## Worst Case ignorieren
|
| 1486 |
+
|
| 1487 |
+
Durchschnittlich gute Performance reicht nicht immer.
|
| 1488 |
+
|
| 1489 |
+
## Keine Messung
|
| 1490 |
+
|
| 1491 |
+
Theoretische Komplexität ersetzt keine Benchmarks.
|
| 1492 |
+
|
| 1493 |
+
---
|
| 1494 |
+
|
| 1495 |
+
# Benchmarking
|
| 1496 |
+
|
| 1497 |
+
Benchmarks messen reale Performance.
|
| 1498 |
+
|
| 1499 |
+
Wichtige Faktoren:
|
| 1500 |
+
|
| 1501 |
+
- Eingabegröße,
|
| 1502 |
+
- Datenverteilung,
|
| 1503 |
+
- Hardware,
|
| 1504 |
+
- Compiler,
|
| 1505 |
+
- Warmup,
|
| 1506 |
+
- Speicher.
|
| 1507 |
+
|
| 1508 |
+
Gute Benchmarks sollten reproduzierbar sein.
|
| 1509 |
+
|
| 1510 |
+
---
|
| 1511 |
+
|
| 1512 |
+
# Profiling
|
| 1513 |
+
|
| 1514 |
+
Profiling zeigt, wo ein Programm tatsächlich Zeit oder Speicher verbraucht.
|
| 1515 |
+
|
| 1516 |
+
Typische Fragen:
|
| 1517 |
+
|
| 1518 |
+
- Welche Funktion ist langsam?
|
| 1519 |
+
- Wo entstehen viele Allokationen?
|
| 1520 |
+
- Welche Schleife dominiert?
|
| 1521 |
+
|
| 1522 |
+
Profiling verhindert Optimierung an der falschen Stelle.
|
| 1523 |
+
|
| 1524 |
+
---
|
| 1525 |
+
|
| 1526 |
+
# Algorithmische Fairness
|
| 1527 |
+
|
| 1528 |
+
Algorithmen können Entscheidungen beeinflussen.
|
| 1529 |
+
|
| 1530 |
+
Besonders bei datengetriebenen Modellen sind wichtig:
|
| 1531 |
+
|
| 1532 |
+
- Bias,
|
| 1533 |
+
- Datenrepräsentation,
|
| 1534 |
+
- Zielmetriken,
|
| 1535 |
+
- Schwellenwerte.
|
| 1536 |
+
|
| 1537 |
+
Fairness ist deshalb nicht nur ein Modellthema, sondern auch eine algorithmische Designfrage.
|
| 1538 |
+
|
| 1539 |
+
---
|
| 1540 |
+
|
| 1541 |
+
# Algorithmische Transparenz
|
| 1542 |
+
|
| 1543 |
+
Transparenz bedeutet, dass nachvollziehbar ist:
|
| 1544 |
+
|
| 1545 |
+
- welche Eingaben verwendet werden,
|
| 1546 |
+
- welche Regeln gelten,
|
| 1547 |
+
- welche Ziele optimiert werden,
|
| 1548 |
+
- welche Grenzen bestehen.
|
| 1549 |
+
|
| 1550 |
+
Bei komplexen Systemen kann vollständige Erklärbarkeit schwierig sein.
|
| 1551 |
+
|
| 1552 |
+
Trotzdem sollte der Systemprozess dokumentiert sein.
|
| 1553 |
+
|
| 1554 |
+
---
|
| 1555 |
+
|
| 1556 |
+
# Algorithmische Sicherheit
|
| 1557 |
+
|
| 1558 |
+
Algorithmen können Sicherheitsrisiken erzeugen, wenn sie:
|
| 1559 |
+
|
| 1560 |
+
- unkontrolliert Ressourcen verbrauchen,
|
| 1561 |
+
- sensible Daten offenlegen,
|
| 1562 |
+
- unerwartete Eingaben falsch behandeln.
|
| 1563 |
+
|
| 1564 |
+
Sicheres Algorithmusdesign berücksichtigt:
|
| 1565 |
+
|
| 1566 |
+
- Input Validation,
|
| 1567 |
+
- Limits,
|
| 1568 |
+
- Timeouts,
|
| 1569 |
+
- Fail-Safe-Verhalten.
|
| 1570 |
+
|
| 1571 |
+
---
|
| 1572 |
+
|
| 1573 |
+
# Auswahl des richtigen Algorithmus
|
| 1574 |
+
|
| 1575 |
+
Die Wahl hängt ab von:
|
| 1576 |
+
|
| 1577 |
+
- Problemgröße,
|
| 1578 |
+
- Eingabeformat,
|
| 1579 |
+
- benötigter Genauigkeit,
|
| 1580 |
+
- Echtzeitanforderungen,
|
| 1581 |
+
- Speicher,
|
| 1582 |
+
- Skalierbarkeit,
|
| 1583 |
+
- Implementierungsaufwand.
|
| 1584 |
+
|
| 1585 |
+
Es gibt selten einen universell besten Algorithmus.
|
| 1586 |
+
|
| 1587 |
+
---
|
| 1588 |
+
|
| 1589 |
+
# Ein Algorithmus-Workflow
|
| 1590 |
+
|
| 1591 |
+
Ein robuster Prozess:
|
| 1592 |
+
|
| 1593 |
+
1. Problem präzise definieren.
|
| 1594 |
+
2. Eingabe und Ausgabe beschreiben.
|
| 1595 |
+
3. Randfälle identifizieren.
|
| 1596 |
+
4. Datenstruktur auswählen.
|
| 1597 |
+
5. Lösungsstrategie entwerfen.
|
| 1598 |
+
6. Korrektheit begründen.
|
| 1599 |
+
7. Komplexität analysieren.
|
| 1600 |
+
8. implementieren.
|
| 1601 |
+
9. testen.
|
| 1602 |
+
10. benchmarken.
|
| 1603 |
+
|
| 1604 |
+
---
|
| 1605 |
+
|
| 1606 |
+
# Checkliste für Algorithmen
|
| 1607 |
+
|
| 1608 |
+
Vor produktivem Einsatz:
|
| 1609 |
+
|
| 1610 |
+
1. Ist das Problem klar definiert?
|
| 1611 |
+
2. Ist der Algorithmus korrekt?
|
| 1612 |
+
3. Terminiert er?
|
| 1613 |
+
4. Sind Randfälle getestet?
|
| 1614 |
+
5. Ist die Laufzeit bekannt?
|
| 1615 |
+
6. Ist der Speicherbedarf bekannt?
|
| 1616 |
+
7. Passt die Datenstruktur?
|
| 1617 |
+
8. Gibt es schnellere Alternativen?
|
| 1618 |
+
9. Ist das Verhalten reproduzierbar?
|
| 1619 |
+
10. Wurde auf realistischen Daten gemessen?
|
| 1620 |
+
|
| 1621 |
+
---
|
| 1622 |
+
|
| 1623 |
+
|
| 1624 |
+
|
| 1625 |
+
# Entscheidbarkeit und Berechenbarkeit
|
| 1626 |
+
|
| 1627 |
+
Nicht jedes mathematisch formulierte Problem lässt sich durch einen Algorithmus vollständig lösen.
|
| 1628 |
+
|
| 1629 |
+
Die theoretische Informatik untersucht deshalb grundlegende Fragen:
|
| 1630 |
+
|
| 1631 |
+
- Welche Probleme sind überhaupt berechenbar?
|
| 1632 |
+
- Welche Probleme sind entscheidbar?
|
| 1633 |
+
- Welche Probleme sind zwar entscheidbar, aber praktisch extrem teuer?
|
| 1634 |
+
|
| 1635 |
+
Diese Fragen sind wichtig, weil sie Grenzen algorithmischer Systeme sichtbar machen.
|
| 1636 |
+
|
| 1637 |
+
# Entscheidbare Probleme
|
| 1638 |
+
|
| 1639 |
+
Ein Entscheidungsproblem fragt nach einer Ja-Nein-Antwort.
|
| 1640 |
+
|
| 1641 |
+
Beispiel:
|
| 1642 |
+
|
| 1643 |
+
> Existiert in diesem Graphen ein Pfad von A nach B?
|
| 1644 |
+
|
| 1645 |
+
Ein Problem ist entscheidbar, wenn es einen Algorithmus gibt, der für jede gültige Eingabe nach endlicher Zeit eine korrekte Antwort liefert.
|
| 1646 |
+
|
| 1647 |
+
# Unentscheidbare Probleme
|
| 1648 |
+
|
| 1649 |
+
Manche Probleme sind grundsätzlich nicht algorithmisch vollständig entscheidbar.
|
| 1650 |
+
|
| 1651 |
+
Ein bekanntes theoretisches Beispiel ist das Halteproblem.
|
| 1652 |
+
|
| 1653 |
+
Es fragt vereinfacht:
|
| 1654 |
+
|
| 1655 |
+
> Kann man für jedes beliebige Programm und jede Eingabe immer entscheiden, ob das Programm irgendwann stoppt?
|
| 1656 |
+
|
| 1657 |
+
Für das allgemeine Halteproblem existiert kein Algorithmus, der diese Frage für alle möglichen Programme korrekt beantworten kann.
|
| 1658 |
+
|
| 1659 |
+
Solche Resultate zeigen, dass es fundamentale Grenzen von Berechnung gibt.
|
| 1660 |
+
|
| 1661 |
+
# Komplexitätsklassen
|
| 1662 |
+
|
| 1663 |
+
Neben der Frage, ob ein Problem lösbar ist, interessiert, wie aufwendig die Lösung ist.
|
| 1664 |
+
|
| 1665 |
+
Dafür verwendet die theoretische Informatik Komplexitätsklassen.
|
| 1666 |
+
|
| 1667 |
+
# P
|
| 1668 |
+
|
| 1669 |
+
P enthält vereinfacht Entscheidungsprobleme, die von einem deterministischen Rechner in polynomialer Zeit gelöst werden können.
|
| 1670 |
+
|
| 1671 |
+
Polynomiale Laufzeiten wie:
|
| 1672 |
+
|
| 1673 |
+
- O(n)
|
| 1674 |
+
- O(n²)
|
| 1675 |
+
- O(n³)
|
| 1676 |
+
|
| 1677 |
+
gelten theoretisch als skalierbarer als exponentielle Laufzeiten.
|
| 1678 |
+
|
| 1679 |
+
# NP
|
| 1680 |
+
|
| 1681 |
+
NP enthält Entscheidungsprobleme, bei denen eine gegebene Lösung in polynomialer Zeit überprüft werden kann.
|
| 1682 |
+
|
| 1683 |
+
Die zentrale offene Frage lautet:
|
| 1684 |
+
|
| 1685 |
+
> Ist P = NP?
|
| 1686 |
+
|
| 1687 |
+
Bis heute ist nicht bekannt, ob jedes Problem, dessen Lösung schnell überprüfbar ist, auch schnell gefunden werden kann.
|
| 1688 |
+
|
| 1689 |
+
# NP-schwere Probleme
|
| 1690 |
+
|
| 1691 |
+
NP-hard bezeichnet Probleme, die mindestens so schwierig sind wie die schwierigsten Probleme in NP.
|
| 1692 |
+
|
| 1693 |
+
Viele wichtige Optimierungsprobleme gehören in diese Kategorie oder stehen in enger Beziehung dazu.
|
| 1694 |
+
|
| 1695 |
+
Beispiele:
|
| 1696 |
+
|
| 1697 |
+
- Traveling Salesperson Problem,
|
| 1698 |
+
- bestimmte Scheduling-Probleme,
|
| 1699 |
+
- kombinatorische Optimierung.
|
| 1700 |
+
|
| 1701 |
+
In der Praxis verwendet man deshalb häufig:
|
| 1702 |
+
|
| 1703 |
+
- Approximation,
|
| 1704 |
+
- Heuristiken,
|
| 1705 |
+
- Branch and Bound,
|
| 1706 |
+
- Metaheuristiken.
|
| 1707 |
+
|
| 1708 |
+
# Das Traveling Salesperson Problem
|
| 1709 |
+
|
| 1710 |
+
Das Traveling Salesperson Problem fragt:
|
| 1711 |
+
|
| 1712 |
+
> Was ist die kürzeste Route, die alle Orte genau besucht und zum Start zurückkehrt?
|
| 1713 |
+
|
| 1714 |
+
Für wenige Orte ist exakte Suche möglich.
|
| 1715 |
+
|
| 1716 |
+
Mit wachsender Anzahl steigt der Suchraum jedoch extrem schnell.
|
| 1717 |
+
|
| 1718 |
+
Das Problem ist deshalb ein klassisches Beispiel für kombinatorische Komplexität.
|
| 1719 |
+
|
| 1720 |
+
# String-Algorithmen
|
| 1721 |
+
|
| 1722 |
+
Viele Systeme verarbeiten Texte und Zeichenfolgen.
|
| 1723 |
+
|
| 1724 |
+
String-Algorithmen werden eingesetzt für:
|
| 1725 |
+
|
| 1726 |
+
- Suche,
|
| 1727 |
+
- Parsing,
|
| 1728 |
+
- Bioinformatik,
|
| 1729 |
+
- Compiler,
|
| 1730 |
+
- Textverarbeitung,
|
| 1731 |
+
- Suchmaschinen.
|
| 1732 |
+
|
| 1733 |
+
# Naive String Search
|
| 1734 |
+
|
| 1735 |
+
Die einfachste Textsuche vergleicht ein Muster an jeder möglichen Position.
|
| 1736 |
+
|
| 1737 |
+
Sie ist leicht zu implementieren, kann bei langen Texten aber ineffizient sein.
|
| 1738 |
+
|
| 1739 |
+
# Knuth-Morris-Pratt
|
| 1740 |
+
|
| 1741 |
+
KMP vermeidet unnötige Wiederholungsvergleiche.
|
| 1742 |
+
|
| 1743 |
+
Dazu wird eine Präfixstruktur des Suchmusters vorbereitet.
|
| 1744 |
+
|
| 1745 |
+
Die Idee:
|
| 1746 |
+
|
| 1747 |
+
Wenn ein Teil des Musters bereits bekannt ist, muss die Suche nicht vollständig zurückspringen.
|
| 1748 |
+
|
| 1749 |
+
# Rabin-Karp
|
| 1750 |
+
|
| 1751 |
+
Rabin-Karp verwendet Hashwerte für Teilstrings.
|
| 1752 |
+
|
| 1753 |
+
Das ist besonders interessant, wenn mehrere Muster gesucht werden.
|
| 1754 |
+
|
| 1755 |
+
# Trie
|
| 1756 |
+
|
| 1757 |
+
Ein Trie speichert Zeichenfolgen über gemeinsame Präfixe.
|
| 1758 |
+
|
| 1759 |
+
Anwendungen:
|
| 1760 |
+
|
| 1761 |
+
- Autocomplete,
|
| 1762 |
+
- Wörterbücher,
|
| 1763 |
+
- Präfixsuche,
|
| 1764 |
+
- Routing.
|
| 1765 |
+
|
| 1766 |
+
# Edit Distance
|
| 1767 |
+
|
| 1768 |
+
Die Edit Distance misst, wie viele Operationen nötig sind, um eine Zeichenfolge in eine andere umzuwandeln.
|
| 1769 |
+
|
| 1770 |
+
Typische Operationen:
|
| 1771 |
+
|
| 1772 |
+
- Einfügen,
|
| 1773 |
+
- Löschen,
|
| 1774 |
+
- Ersetzen.
|
| 1775 |
+
|
| 1776 |
+
Anwendungen:
|
| 1777 |
+
|
| 1778 |
+
- Rechtschreibkorrektur,
|
| 1779 |
+
- Ähnlichkeit,
|
| 1780 |
+
- Bioinformatik,
|
| 1781 |
+
- Record Matching.
|
| 1782 |
+
|
| 1783 |
+
# Sequenzalgorithmen
|
| 1784 |
+
|
| 1785 |
+
Sequenzprobleme treten in vielen Bereichen auf.
|
| 1786 |
+
|
| 1787 |
+
Ein klassisches Beispiel ist die **Longest Common Subsequence**.
|
| 1788 |
+
|
| 1789 |
+
Dynamic Programming kann solche Probleme effizienter lösen als naive vollständige Suche.
|
| 1790 |
+
|
| 1791 |
+
# Algorithmen für Mengen
|
| 1792 |
+
|
| 1793 |
+
Mengenoperationen sind grundlegende Bausteine.
|
| 1794 |
+
|
| 1795 |
+
Typische Operationen:
|
| 1796 |
+
|
| 1797 |
+
- Union,
|
| 1798 |
+
- Intersection,
|
| 1799 |
+
- Difference,
|
| 1800 |
+
- Membership.
|
| 1801 |
+
|
| 1802 |
+
Geeignete Datenstrukturen sind:
|
| 1803 |
+
|
| 1804 |
+
- Hash Sets,
|
| 1805 |
+
- Balanced Trees,
|
| 1806 |
+
- Bitsets.
|
| 1807 |
+
|
| 1808 |
+
# Union-Find
|
| 1809 |
+
|
| 1810 |
+
Union-Find, auch Disjoint Set Union, verwaltet dynamische Mengen.
|
| 1811 |
+
|
| 1812 |
+
Wichtige Operationen:
|
| 1813 |
+
|
| 1814 |
+
- find,
|
| 1815 |
+
- union.
|
| 1816 |
+
|
| 1817 |
+
Anwendungen:
|
| 1818 |
+
|
| 1819 |
+
- Connected Components,
|
| 1820 |
+
- Kruskal,
|
| 1821 |
+
- Netzwerkprobleme.
|
| 1822 |
+
|
| 1823 |
+
Optimierungen wie:
|
| 1824 |
+
|
| 1825 |
+
- Path Compression,
|
| 1826 |
+
- Union by Rank
|
| 1827 |
+
|
| 1828 |
+
machen Union-Find sehr effizient.
|
| 1829 |
+
|
| 1830 |
+
# Bloom Filter
|
| 1831 |
+
|
| 1832 |
+
Bloom Filter sind probabilistische Datenstrukturen.
|
| 1833 |
+
|
| 1834 |
+
Sie beantworten schnell die Frage:
|
| 1835 |
+
|
| 1836 |
+
> Ist dieses Element möglicherweise in einer Menge enthalten?
|
| 1837 |
+
|
| 1838 |
+
Ein Bloom Filter kann False Positives liefern, aber keine False Negatives.
|
| 1839 |
+
|
| 1840 |
+
Anwendungen:
|
| 1841 |
+
|
| 1842 |
+
- Caches,
|
| 1843 |
+
- Datenbanken,
|
| 1844 |
+
- verteilte Systeme.
|
| 1845 |
+
|
| 1846 |
+
# Algorithmen in verteilten Systemen
|
| 1847 |
+
|
| 1848 |
+
Verteilte Systeme benötigen spezielle algorithmische Verfahren.
|
| 1849 |
+
|
| 1850 |
+
Probleme entstehen durch:
|
| 1851 |
+
|
| 1852 |
+
- Netzwerkverzögerung,
|
| 1853 |
+
- Teilausfälle,
|
| 1854 |
+
- parallele Änderungen,
|
| 1855 |
+
- fehlende globale Uhr.
|
| 1856 |
+
|
| 1857 |
+
# Konsensalgorithmen
|
| 1858 |
+
|
| 1859 |
+
Konsens bedeutet, dass mehrere Knoten sich auf einen gemeinsamen Zustand einigen.
|
| 1860 |
+
|
| 1861 |
+
Bekannte Verfahren:
|
| 1862 |
+
|
| 1863 |
+
- Paxos,
|
| 1864 |
+
- Raft.
|
| 1865 |
+
|
| 1866 |
+
Konsens ist zentral für:
|
| 1867 |
+
|
| 1868 |
+
- verteilte Datenbanken,
|
| 1869 |
+
- Cluster,
|
| 1870 |
+
- Replikation.
|
| 1871 |
+
|
| 1872 |
+
# Leader Election
|
| 1873 |
+
|
| 1874 |
+
Leader Election bestimmt einen Koordinator in einem verteilten System.
|
| 1875 |
+
|
| 1876 |
+
Der Leader kann beispielsweise:
|
| 1877 |
+
|
| 1878 |
+
- Writes koordinieren,
|
| 1879 |
+
- Jobs verteilen,
|
| 1880 |
+
- Replikation steuern.
|
| 1881 |
+
|
| 1882 |
+
# Replikation
|
| 1883 |
+
|
| 1884 |
+
Replikation speichert Daten mehrfach.
|
| 1885 |
+
|
| 1886 |
+
Ziele:
|
| 1887 |
+
|
| 1888 |
+
- Ausfallsicherheit,
|
| 1889 |
+
- Verfügbarkeit,
|
| 1890 |
+
- Performance.
|
| 1891 |
+
|
| 1892 |
+
Algorithmische Herausforderungen:
|
| 1893 |
+
|
| 1894 |
+
- Konsistenz,
|
| 1895 |
+
- Konflikte,
|
| 1896 |
+
- Reihenfolge von Änderungen.
|
| 1897 |
+
|
| 1898 |
+
# Hashing
|
| 1899 |
+
|
| 1900 |
+
Hashfunktionen bilden Eingaben auf kompakte Werte ab.
|
| 1901 |
+
|
| 1902 |
+
Anwendungen:
|
| 1903 |
+
|
| 1904 |
+
- Hash Tables,
|
| 1905 |
+
- Checksums,
|
| 1906 |
+
- Caches,
|
| 1907 |
+
- Datenverteilung.
|
| 1908 |
+
|
| 1909 |
+
Eine gute Hashfunktion verteilt Eingaben möglichst gleichmäßig.
|
| 1910 |
+
|
| 1911 |
+
# Consistent Hashing
|
| 1912 |
+
|
| 1913 |
+
Consistent Hashing verteilt Schlüssel auf mehrere Server.
|
| 1914 |
+
|
| 1915 |
+
Vorteil:
|
| 1916 |
+
|
| 1917 |
+
Wenn Server hinzukommen oder entfernt werden, müssen nur relativ wenige Schlüssel neu verteilt werden.
|
| 1918 |
+
|
| 1919 |
+
Anwendungen:
|
| 1920 |
+
|
| 1921 |
+
- Distributed Caches,
|
| 1922 |
+
- Sharding,
|
| 1923 |
+
- verteilte Datenbanken.
|
| 1924 |
+
|
| 1925 |
+
# Algorithmen in Kryptografie
|
| 1926 |
+
|
| 1927 |
+
Kryptografische Systeme verwenden spezialisierte Algorithmen.
|
| 1928 |
+
|
| 1929 |
+
Bereiche:
|
| 1930 |
+
|
| 1931 |
+
- Verschlüsselung,
|
| 1932 |
+
- Hashing,
|
| 1933 |
+
- digitale Signaturen,
|
| 1934 |
+
- Schlüsselaustausch.
|
| 1935 |
+
|
| 1936 |
+
Kryptografie ist ein eigenes tiefes Fachgebiet. Für Algorithm Engineering ist wichtig, kryptografische Primitive nicht selbst improvisiert neu zu erfinden.
|
| 1937 |
+
|
| 1938 |
+
# Numerische Algorithmen
|
| 1939 |
+
|
| 1940 |
+
Numerische Verfahren lösen mathematische Probleme näherungsweise.
|
| 1941 |
+
|
| 1942 |
+
Beispiele:
|
| 1943 |
+
|
| 1944 |
+
- Nullstellensuche,
|
| 1945 |
+
- lineare Gleichungssysteme,
|
| 1946 |
+
- numerische Integration,
|
| 1947 |
+
- Differentialgleichungen.
|
| 1948 |
+
|
| 1949 |
+
Dabei spielen zusätzlich zur Laufzeit auch numerische Stabilität und Rundungsfehler eine wichtige Rolle.
|
| 1950 |
+
|
| 1951 |
+
# Binäre Suche auf Antworten
|
| 1952 |
+
|
| 1953 |
+
Binäre Suche kann nicht nur Elemente suchen.
|
| 1954 |
+
|
| 1955 |
+
Sie kann auch einen Wertebereich durchsuchen, wenn eine monotone Bedingung existiert.
|
| 1956 |
+
|
| 1957 |
+
Beispiel:
|
| 1958 |
+
|
| 1959 |
+
> Was ist die kleinste Kapazität, mit der ein Prozess innerhalb eines Limits abgeschlossen werden kann?
|
| 1960 |
+
|
| 1961 |
+
Dieses Muster wird häufig in Optimierungsaufgaben verwendet.
|
| 1962 |
+
|
| 1963 |
+
# Two-Pointer-Technik
|
| 1964 |
+
|
| 1965 |
+
Two Pointer verwendet zwei Indizes, die sich durch Daten bewegen.
|
| 1966 |
+
|
| 1967 |
+
Typische Anwendungen:
|
| 1968 |
+
|
| 1969 |
+
- sortierte Arrays,
|
| 1970 |
+
- Paar-Suche,
|
| 1971 |
+
- Fensterprobleme,
|
| 1972 |
+
- Duplikaterkennung.
|
| 1973 |
+
|
| 1974 |
+
Die Technik kann naive O(n²)-Lösungen häufig auf O(n) reduzieren.
|
| 1975 |
+
|
| 1976 |
+
# Sliding Window
|
| 1977 |
+
|
| 1978 |
+
Sliding Window verarbeitet zusammenhängende Bereiche einer Sequenz.
|
| 1979 |
+
|
| 1980 |
+
Anwendungen:
|
| 1981 |
+
|
| 1982 |
+
- maximale Summe über k Elemente,
|
| 1983 |
+
- längstes Teilstück mit bestimmten Eigenschaften,
|
| 1984 |
+
- Streaming-Analysen.
|
| 1985 |
+
|
| 1986 |
+
Statt jedes Fenster vollständig neu zu berechnen, wird der Zustand inkrementell aktualisiert.
|
| 1987 |
+
|
| 1988 |
+
# Prefix Sums
|
| 1989 |
+
|
| 1990 |
+
Prefix Sums speichern kumulative Summen.
|
| 1991 |
+
|
| 1992 |
+
Dadurch können Bereichssummen später sehr schnell berechnet werden.
|
| 1993 |
+
|
| 1994 |
+
Vorbereitung:
|
| 1995 |
+
|
| 1996 |
+
**O(n)**
|
| 1997 |
+
|
| 1998 |
+
Bereichsabfrage:
|
| 1999 |
+
|
| 2000 |
+
häufig **O(1)**
|
| 2001 |
+
|
| 2002 |
+
Dieses Muster zeigt, wie Precomputation spätere Abfragen beschleunigen kann.
|
| 2003 |
+
|
| 2004 |
+
# Memoization
|
| 2005 |
+
|
| 2006 |
+
Memoization speichert Ergebnisse bereits berechneter Funktionsaufrufe.
|
| 2007 |
+
|
| 2008 |
+
Sie wird häufig mit Rekursion kombiniert.
|
| 2009 |
+
|
| 2010 |
+
Besonders nützlich bei:
|
| 2011 |
+
|
| 2012 |
+
- Dynamic Programming,
|
| 2013 |
+
- rekursiven Suchproblemen,
|
| 2014 |
+
- teuren wiederkehrenden Berechnungen.
|
| 2015 |
+
|
| 2016 |
+
# Caching als Algorithmusstrategie
|
| 2017 |
+
|
| 2018 |
+
Caching ist nicht nur Infrastruktur.
|
| 2019 |
+
|
| 2020 |
+
Es ist auch eine algorithmische Strategie.
|
| 2021 |
+
|
| 2022 |
+
Ein System speichert teure Ergebnisse, um spätere Zugriffe zu beschleunigen.
|
| 2023 |
+
|
| 2024 |
+
Wichtige Fragen:
|
| 2025 |
+
|
| 2026 |
+
- Was wird gecacht?
|
| 2027 |
+
- Wie lange?
|
| 2028 |
+
- Wann wird invalidiert?
|
| 2029 |
+
- Wie groß darf der Cache werden?
|
| 2030 |
+
|
| 2031 |
+
Cache Invalidation gehört zu den schwierigeren praktischen Problemen verteilter Systeme.
|
| 2032 |
+
|
| 2033 |
+
# Online Algorithms
|
| 2034 |
+
|
| 2035 |
+
Online Algorithms müssen Entscheidungen treffen, bevor alle zukünftigen Eingaben bekannt sind.
|
| 2036 |
+
|
| 2037 |
+
Beispiele:
|
| 2038 |
+
|
| 2039 |
+
- Scheduling,
|
| 2040 |
+
- Streaming,
|
| 2041 |
+
- Ressourcenallokation.
|
| 2042 |
+
|
| 2043 |
+
Sie unterscheiden sich von Offline-Algorithmen, die alle Daten im Voraus kennen.
|
| 2044 |
+
|
| 2045 |
+
# Streaming Algorithms
|
| 2046 |
+
|
| 2047 |
+
Streaming Algorithms verarbeiten Datenströme, ohne alle Daten dauerhaft zu speichern.
|
| 2048 |
+
|
| 2049 |
+
Anwendungen:
|
| 2050 |
+
|
| 2051 |
+
- Telemetrie,
|
| 2052 |
+
- Event Streams,
|
| 2053 |
+
- Netzwerkdaten,
|
| 2054 |
+
- Echtzeitanalyse.
|
| 2055 |
+
|
| 2056 |
+
Wichtige Ziele:
|
| 2057 |
+
|
| 2058 |
+
- geringer Speicher,
|
| 2059 |
+
- inkrementelle Verarbeitung,
|
| 2060 |
+
- niedrige Latenz.
|
| 2061 |
+
|
| 2062 |
+
# Approximate Counting
|
| 2063 |
+
|
| 2064 |
+
Bei sehr großen Streams können exakte Berechnungen teuer sein.
|
| 2065 |
+
|
| 2066 |
+
Probabilistische Datenstrukturen erlauben Näherungen mit sehr geringem Speicher.
|
| 2067 |
+
|
| 2068 |
+
Beispiele:
|
| 2069 |
+
|
| 2070 |
+
- HyperLogLog,
|
| 2071 |
+
- Count-Min Sketch.
|
| 2072 |
+
|
| 2073 |
+
# HyperLogLog
|
| 2074 |
+
|
| 2075 |
+
HyperLogLog schätzt die Anzahl unterschiedlicher Elemente.
|
| 2076 |
+
|
| 2077 |
+
Anwendung:
|
| 2078 |
+
|
| 2079 |
+
- Unique Visitors,
|
| 2080 |
+
- große Event Streams,
|
| 2081 |
+
- verteilte Analysen.
|
| 2082 |
+
|
| 2083 |
+
Es benötigt deutlich weniger Speicher als das Speichern aller eindeutigen Werte.
|
| 2084 |
+
|
| 2085 |
+
# Count-Min Sketch
|
| 2086 |
+
|
| 2087 |
+
Count-Min Sketch schätzt Häufigkeiten in Datenströmen.
|
| 2088 |
+
|
| 2089 |
+
Anwendungen:
|
| 2090 |
+
|
| 2091 |
+
- Heavy Hitters,
|
| 2092 |
+
- Netzwerkverkehr,
|
| 2093 |
+
- große Ereignisströme.
|
| 2094 |
+
|
| 2095 |
+
# External Memory Algorithms
|
| 2096 |
+
|
| 2097 |
+
Wenn Daten nicht vollständig in den Arbeitsspeicher passen, wird I/O zu einem zentralen Kostenfaktor.
|
| 2098 |
+
|
| 2099 |
+
External-Memory-Algorithmen optimieren deshalb:
|
| 2100 |
+
|
| 2101 |
+
- Disk Reads,
|
| 2102 |
+
- Blockzugriffe,
|
| 2103 |
+
- Datenlayout.
|
| 2104 |
+
|
| 2105 |
+
Ein Beispiel ist External Merge Sort.
|
| 2106 |
+
|
| 2107 |
+
# Cache-Aware und Cache-Oblivious Algorithms
|
| 2108 |
+
|
| 2109 |
+
Moderne Prozessoren besitzen mehrere Cache-Ebenen.
|
| 2110 |
+
|
| 2111 |
+
Algorithm Engineering kann Speicherzugriffe so strukturieren, dass Daten möglichst effizient genutzt werden.
|
| 2112 |
+
|
| 2113 |
+
Das zeigt, dass reale Performance nicht nur von Big O abhängt.
|
| 2114 |
+
|
| 2115 |
+
# Approximation vs. Exaktheit
|
| 2116 |
+
|
| 2117 |
+
Nicht jedes Problem benötigt eine exakte Lösung.
|
| 2118 |
+
|
| 2119 |
+
Praktische Systeme müssen häufig abwägen zwischen:
|
| 2120 |
+
|
| 2121 |
+
- Genauigkeit,
|
| 2122 |
+
- Laufzeit,
|
| 2123 |
+
- Kosten,
|
| 2124 |
+
- Reaktionszeit.
|
| 2125 |
+
|
| 2126 |
+
Bei Echtzeitsystemen kann eine sehr gute Näherung wertvoller sein als ein theoretisch perfektes Ergebnis, das zu spät kommt.
|
| 2127 |
+
|
| 2128 |
+
# Deterministische und probabilistische Algorithmen
|
| 2129 |
+
|
| 2130 |
+
## Deterministisch
|
| 2131 |
+
|
| 2132 |
+
Gleiche Eingabe erzeugt bei gleichem Zustand denselben Ablauf.
|
| 2133 |
+
|
| 2134 |
+
## Probabilistisch
|
| 2135 |
+
|
| 2136 |
+
Zufall beeinflusst den Ablauf oder das Ergebnis.
|
| 2137 |
+
|
| 2138 |
+
Probabilistische Verfahren sind wichtig in:
|
| 2139 |
+
|
| 2140 |
+
- Sampling,
|
| 2141 |
+
- Approximation,
|
| 2142 |
+
- Machine Learning,
|
| 2143 |
+
- Simulation.
|
| 2144 |
+
|
| 2145 |
+
# Algorithmen testen
|
| 2146 |
+
|
| 2147 |
+
Algorithmen sollten systematisch getestet werden.
|
| 2148 |
+
|
| 2149 |
+
Testfälle:
|
| 2150 |
+
|
| 2151 |
+
- normale Fälle,
|
| 2152 |
+
- minimale Eingabe,
|
| 2153 |
+
- maximale Eingabe,
|
| 2154 |
+
- leere Eingabe,
|
| 2155 |
+
- doppelte Werte,
|
| 2156 |
+
- sortierte Eingabe,
|
| 2157 |
+
- umgekehrt sortierte Eingabe,
|
| 2158 |
+
- zufällige Eingabe.
|
| 2159 |
+
|
| 2160 |
+
Zusätzlich sind Property-Based Tests nützlich.
|
| 2161 |
+
|
| 2162 |
+
# Property-Based Testing
|
| 2163 |
+
|
| 2164 |
+
Property-Based Testing prüft allgemeine Eigenschaften.
|
| 2165 |
+
|
| 2166 |
+
Beispiel Sortierung:
|
| 2167 |
+
|
| 2168 |
+
- Ausgabe ist sortiert.
|
| 2169 |
+
- Ausgabe enthält dieselben Elemente wie Eingabe.
|
| 2170 |
+
- Sortieren einer bereits sortierten Ausgabe verändert nichts.
|
| 2171 |
+
|
| 2172 |
+
Solche Eigenschaften können viele zufällig erzeugte Testfälle abdecken.
|
| 2173 |
+
|
| 2174 |
+
# Formale Verifikation
|
| 2175 |
+
|
| 2176 |
+
Formale Verifikation versucht mathematisch zu zeigen, dass ein Algorithmus oder Programm bestimmte Eigenschaften erfüllt.
|
| 2177 |
+
|
| 2178 |
+
Sie ist besonders relevant für:
|
| 2179 |
+
|
| 2180 |
+
- sicherheitskritische Systeme,
|
| 2181 |
+
- Protokolle,
|
| 2182 |
+
- Kryptografie,
|
| 2183 |
+
- Hardware.
|
| 2184 |
+
|
| 2185 |
+
# Invarianten
|
| 2186 |
+
|
| 2187 |
+
Eine Invariante ist eine Eigenschaft, die während eines Algorithmus erhalten bleibt.
|
| 2188 |
+
|
| 2189 |
+
Invarianten helfen bei:
|
| 2190 |
+
|
| 2191 |
+
- Korrektheitsbeweisen,
|
| 2192 |
+
- Debugging,
|
| 2193 |
+
- formaler Verifikation.
|
| 2194 |
+
|
| 2195 |
+
# Algorithmen visualisieren
|
| 2196 |
+
|
| 2197 |
+
Visualisierung kann komplexe Abläufe verständlicher machen.
|
| 2198 |
+
|
| 2199 |
+
Beispiele:
|
| 2200 |
+
|
| 2201 |
+
- Sortierschritte,
|
| 2202 |
+
- Graphdurchläufe,
|
| 2203 |
+
- Heap-Operationen,
|
| 2204 |
+
- Dynamic-Programming-Tabellen.
|
| 2205 |
+
|
| 2206 |
+
Interaktive Visualisierung ist besonders geeignet für Lern- und Referenzsysteme.
|
| 2207 |
+
|
| 2208 |
+
# Algorithmische Auswahl in AI Systems
|
| 2209 |
+
|
| 2210 |
+
Moderne KI-Systeme bestehen aus vielen Entscheidungen, die algorithmisch optimiert werden können.
|
| 2211 |
+
|
| 2212 |
+
Beispiele:
|
| 2213 |
+
|
| 2214 |
+
- welches Modell wird geroutet,
|
| 2215 |
+
- welche Dokumente werden retrieved,
|
| 2216 |
+
- welche Tools werden priorisiert,
|
| 2217 |
+
- wie werden Agenten geplant,
|
| 2218 |
+
- wann wird eskaliert.
|
| 2219 |
+
|
| 2220 |
+
Dadurch verschiebt sich Algorithmusdesign zunehmend von einzelnen Funktionen zu ganzen AI-Systempipelines.
|
| 2221 |
+
|
| 2222 |
+
# Algorithmische Effizienz bei LLMs
|
| 2223 |
+
|
| 2224 |
+
Large Language Models erzeugen neue algorithmische Herausforderungen.
|
| 2225 |
+
|
| 2226 |
+
Relevante Themen:
|
| 2227 |
+
|
| 2228 |
+
- Attention-Komplexität,
|
| 2229 |
+
- KV Cache,
|
| 2230 |
+
- Batching,
|
| 2231 |
+
- Speculative Decoding,
|
| 2232 |
+
- Quantisierung,
|
| 2233 |
+
- Parallelisierung.
|
| 2234 |
+
|
| 2235 |
+
Effizienzalgorithmen entscheiden mit darüber, ob große Modelle praktisch und wirtschaftlich nutzbar sind.
|
| 2236 |
+
|
| 2237 |
+
# Algorithmen und World Models
|
| 2238 |
+
|
| 2239 |
+
World Models versuchen, Zustände und Dynamik einer Umgebung abzubilden.
|
| 2240 |
+
|
| 2241 |
+
Algorithmische Komponenten können umfassen:
|
| 2242 |
+
|
| 2243 |
+
- State Estimation,
|
| 2244 |
+
- Planning,
|
| 2245 |
+
- Search,
|
| 2246 |
+
- Simulation,
|
| 2247 |
+
- Optimization.
|
| 2248 |
+
|
| 2249 |
+
Damit verbinden sich klassische KI-Algorithmen mit modernen generativen Modellen.
|
| 2250 |
+
|
| 2251 |
+
# Algorithmen und autonome Systeme
|
| 2252 |
+
|
| 2253 |
+
Autonome Systeme müssen ständig Entscheidungen treffen.
|
| 2254 |
+
|
| 2255 |
+
Sie benötigen Algorithmen für:
|
| 2256 |
+
|
| 2257 |
+
- Wahrnehmung,
|
| 2258 |
+
- Planung,
|
| 2259 |
+
- Kontrolle,
|
| 2260 |
+
- Fehlerbehandlung,
|
| 2261 |
+
- Priorisierung.
|
| 2262 |
+
|
| 2263 |
+
Je höher die Autonomie, desto wichtiger werden überprüfbare und robuste algorithmische Komponenten.
|
| 2264 |
+
|
| 2265 |
+
# Zukunft von Algorithmen
|
| 2266 |
+
|
| 2267 |
+
Algorithmen bleiben auch in einer Zukunft mit sehr leistungsfähiger KI fundamental.
|
| 2268 |
+
|
| 2269 |
+
Modelle können Algorithmen automatisch erzeugen, auswählen oder verbessern. Trotzdem bleibt die Frage:
|
| 2270 |
+
|
| 2271 |
+
- Ist der Algorithmus korrekt?
|
| 2272 |
+
- Ist er effizient?
|
| 2273 |
+
- Ist er sicher?
|
| 2274 |
+
- Ist er skalierbar?
|
| 2275 |
+
- Ist er nachvollziehbar?
|
| 2276 |
+
|
| 2277 |
+
Mit zunehmender KI-Fähigkeit dürfte **automatisches Algorithm Design** wichtiger werden.
|
| 2278 |
+
|
| 2279 |
+
KI-Systeme könnten:
|
| 2280 |
+
|
| 2281 |
+
- neue Heuristiken entdecken,
|
| 2282 |
+
- Implementierungen optimieren,
|
| 2283 |
+
- Suchstrategien anpassen,
|
| 2284 |
+
- Algorithmen benchmarken.
|
| 2285 |
+
|
| 2286 |
+
Dadurch wird Algorithmik nicht weniger wichtig, sondern stärker mit KI-Forschung und Software Engineering verschmelzen.
|
| 2287 |
+
|
| 2288 |
+
# Typische Interview- und Lernmuster
|
| 2289 |
+
|
| 2290 |
+
Viele algorithmische Aufgaben lassen sich auf wiederkehrende Muster zurückführen.
|
| 2291 |
+
|
| 2292 |
+
Dazu gehören:
|
| 2293 |
+
|
| 2294 |
+
- Hash Map,
|
| 2295 |
+
- Two Pointer,
|
| 2296 |
+
- Sliding Window,
|
| 2297 |
+
- Binary Search,
|
| 2298 |
+
- Stack,
|
| 2299 |
+
- Queue,
|
| 2300 |
+
- BFS,
|
| 2301 |
+
- DFS,
|
| 2302 |
+
- Heap,
|
| 2303 |
+
- Dynamic Programming,
|
| 2304 |
+
- Greedy,
|
| 2305 |
+
- Backtracking.
|
| 2306 |
+
|
| 2307 |
+
Das Erkennen des Musters ist oft wichtiger als das Auswendiglernen einzelner Lösungen.
|
| 2308 |
+
|
| 2309 |
+
# Algorithmuswahl als Engineering-Entscheidung
|
| 2310 |
+
|
| 2311 |
+
In der Praxis zählt nicht nur theoretische Eleganz.
|
| 2312 |
+
|
| 2313 |
+
Eine gute Lösung berücksichtigt:
|
| 2314 |
+
|
| 2315 |
+
- Entwicklungszeit,
|
| 2316 |
+
- Wartbarkeit,
|
| 2317 |
+
- Teamwissen,
|
| 2318 |
+
- Performance,
|
| 2319 |
+
- Betriebskosten,
|
| 2320 |
+
- Risiko.
|
| 2321 |
+
|
| 2322 |
+
Ein theoretisch minimal besserer Algorithmus kann praktisch schlechter sein, wenn er deutlich komplizierter zu warten ist.
|
| 2323 |
+
|
| 2324 |
+
# Einfache Lösung zuerst
|
| 2325 |
+
|
| 2326 |
+
Ein guter Engineering-Ansatz ist häufig:
|
| 2327 |
+
|
| 2328 |
+
1. korrekte einfache Lösung bauen,
|
| 2329 |
+
2. messen,
|
| 2330 |
+
3. Engpass identifizieren,
|
| 2331 |
+
4. gezielt optimieren.
|
| 2332 |
+
|
| 2333 |
+
Das verhindert unnötige Komplexität.
|
| 2334 |
+
|
| 2335 |
+
# Wann braucht man keinen komplexen Algorithmus?
|
| 2336 |
+
|
| 2337 |
+
Nicht jedes Problem benötigt eine hochoptimierte Lösung.
|
| 2338 |
+
|
| 2339 |
+
Wenn:
|
| 2340 |
+
|
| 2341 |
+
- Datenmenge klein ist,
|
| 2342 |
+
- Prozess selten ausgeführt wird,
|
| 2343 |
+
- Laufzeit bereits ausreichend ist,
|
| 2344 |
+
|
| 2345 |
+
kann eine einfache O(n²)-Lösung besser sein als eine schwer wartbare komplexe Alternative.
|
| 2346 |
+
|
| 2347 |
+
Algorithmische Qualität bedeutet deshalb nicht automatisch maximale theoretische Optimierung.
|
| 2348 |
+
|
| 2349 |
+
|
| 2350 |
+
# Häufige Fragen zu Algorithmen
|
| 2351 |
+
|
| 2352 |
+
## Was ist ein Algorithmus?
|
| 2353 |
+
|
| 2354 |
+
Ein Algorithmus ist eine eindeutige, endliche Folge von Schritten zur Lösung eines Problems.
|
| 2355 |
+
|
| 2356 |
+
## Was ist ein Algorithmus einfach erklärt?
|
| 2357 |
+
|
| 2358 |
+
Ein Algorithmus ist wie ein Rezept für einen Computer: Er beschreibt, welche Schritte in welcher Reihenfolge ausgeführt werden.
|
| 2359 |
+
|
| 2360 |
+
## Was ist der Unterschied zwischen Algorithmus und Programm?
|
| 2361 |
+
|
| 2362 |
+
Der Algorithmus beschreibt die Logik. Das Programm ist die konkrete Implementierung.
|
| 2363 |
+
|
| 2364 |
+
## Was ist Big O?
|
| 2365 |
+
|
| 2366 |
+
Big O beschreibt, wie Laufzeit oder Speicherbedarf mit der Eingabegröße wachsen.
|
| 2367 |
+
|
| 2368 |
+
## Was bedeutet O(n)?
|
| 2369 |
+
|
| 2370 |
+
Der Aufwand wächst ungefähr linear mit der Anzahl der Elemente.
|
| 2371 |
+
|
| 2372 |
+
## Was bedeutet O(log n)?
|
| 2373 |
+
|
| 2374 |
+
Der Aufwand wächst logarithmisch. Binäre Suche ist ein typisches Beispiel.
|
| 2375 |
+
|
| 2376 |
+
## Was ist ein Sortieralgorithmus?
|
| 2377 |
+
|
| 2378 |
+
Ein Algorithmus, der Elemente in eine definierte Reihenfolge bringt.
|
| 2379 |
+
|
| 2380 |
+
## Was ist ein Suchalgorithmus?
|
| 2381 |
+
|
| 2382 |
+
Ein Verfahren, das ein Element, einen Zustand oder eine Lösung findet.
|
| 2383 |
+
|
| 2384 |
+
## Was ist Dynamic Programming?
|
| 2385 |
+
|
| 2386 |
+
Eine Methode, die Ergebnisse wiederkehrender Teilprobleme speichert.
|
| 2387 |
+
|
| 2388 |
+
## Was ist ein Greedy Algorithm?
|
| 2389 |
+
|
| 2390 |
+
Ein Verfahren, das in jedem Schritt die lokal beste Entscheidung trifft.
|
| 2391 |
+
|
| 2392 |
+
## Was ist Backtracking?
|
| 2393 |
+
|
| 2394 |
+
Eine Suchstrategie, die Möglichkeiten ausprobiert und bei Sackgassen zurückgeht.
|
| 2395 |
+
|
| 2396 |
+
## Was ist ein Graphalgorithmus?
|
| 2397 |
+
|
| 2398 |
+
Ein Algorithmus zur Verarbeitung von Netzwerken aus Knoten und Kanten.
|
| 2399 |
+
|
| 2400 |
+
## Was ist Dijkstra?
|
| 2401 |
+
|
| 2402 |
+
Ein Algorithmus zur Berechnung kürzester Wege in Graphen mit nicht-negativen Gewichten.
|
| 2403 |
+
|
| 2404 |
+
## Was ist A*?
|
| 2405 |
+
|
| 2406 |
+
Ein Suchalgorithmus, der eine Heuristik nutzt, um den Weg zum Ziel effizienter zu finden.
|
| 2407 |
+
|
| 2408 |
+
## Was ist ein randomisierter Algorithmus?
|
| 2409 |
+
|
| 2410 |
+
Ein Algorithmus, der Zufall als Teil seiner Strategie verwendet.
|
| 2411 |
+
|
| 2412 |
+
## Was ist ein Optimierungsalgorithmus?
|
| 2413 |
+
|
| 2414 |
+
Ein Verfahren, das eine möglichst gute Lösung unter definierten Bedingungen sucht.
|
| 2415 |
+
|
| 2416 |
+
## Sind Machine-Learning-Modelle Algorithmen?
|
| 2417 |
+
|
| 2418 |
+
Machine Learning verwendet Algorithmen zum Training und zur Vorhersage. Das trainierte Modell selbst ist jedoch nicht einfach mit einem klassischen Algorithmus gleichzusetzen.
|
| 2419 |
+
|
| 2420 |
+
## Welche Algorithmen nutzt KI?
|
| 2421 |
+
|
| 2422 |
+
Unter anderem Optimierung, Suche, Sampling, Attention, Routing, Graphverfahren und Reinforcement Learning.
|
| 2423 |
+
|
| 2424 |
+
## Werden Algorithmen durch KI unwichtig?
|
| 2425 |
+
|
| 2426 |
+
Nein. KI-Systeme selbst bestehen aus vielen algorithmischen Komponenten.
|
| 2427 |
+
|
| 2428 |
+
## Warum sind Algorithmen für AGI wichtig?
|
| 2429 |
+
|
| 2430 |
+
Allgemeinere KI benötigt weiterhin effiziente Verfahren für Planung, Suche, Memory, Tool Use, Ressourcenallokation und Koordination.
|
| 2431 |
+
|
| 2432 |
+
---
|
| 2433 |
+
|
| 2434 |
+
# Glossar
|
| 2435 |
+
|
| 2436 |
+
**Algorithmus**
|
| 2437 |
+
Eindeutige endliche Schrittfolge zur Lösung eines Problems.
|
| 2438 |
+
|
| 2439 |
+
**Algorithm Design**
|
| 2440 |
+
Systematische Entwicklung von Lösungsverfahren.
|
| 2441 |
+
|
| 2442 |
+
**Big O**
|
| 2443 |
+
Notation für asymptotisches Wachstum von Laufzeit oder Speicherbedarf.
|
| 2444 |
+
|
| 2445 |
+
**Backtracking**
|
| 2446 |
+
Suchstrategie mit systematischem Zurückgehen bei Sackgassen.
|
| 2447 |
+
|
| 2448 |
+
**BFS**
|
| 2449 |
+
Breadth-First Search.
|
| 2450 |
+
|
| 2451 |
+
**DFS**
|
| 2452 |
+
Depth-First Search.
|
| 2453 |
+
|
| 2454 |
+
**Dynamic Programming**
|
| 2455 |
+
Methode zur Wiederverwendung bereits gelöster Teilprobleme.
|
| 2456 |
+
|
| 2457 |
+
**Greedy Algorithm**
|
| 2458 |
+
Verfahren mit lokal optimalen Entscheidungen.
|
| 2459 |
+
|
| 2460 |
+
**Graph**
|
| 2461 |
+
Datenstruktur aus Knoten und Kanten.
|
| 2462 |
+
|
| 2463 |
+
**Hash Table**
|
| 2464 |
+
Datenstruktur für schnellen Schlüsselzugriff.
|
| 2465 |
+
|
| 2466 |
+
**Heap**
|
| 2467 |
+
Datenstruktur für Prioritätsoperationen.
|
| 2468 |
+
|
| 2469 |
+
**Heuristik**
|
| 2470 |
+
Praktische Näherungsstrategie ohne Garantie auf optimale Lösung.
|
| 2471 |
+
|
| 2472 |
+
**Komplexität**
|
| 2473 |
+
Wachstum von Rechen- oder Speicheraufwand.
|
| 2474 |
+
|
| 2475 |
+
**Optimierung**
|
| 2476 |
+
Suche nach der besten Lösung unter gegebenen Bedingungen.
|
| 2477 |
+
|
| 2478 |
+
**Rekursion**
|
| 2479 |
+
Selbstaufruf einer Funktion.
|
| 2480 |
+
|
| 2481 |
+
**Sortieralgorithmus**
|
| 2482 |
+
Algorithmus zur Ordnung von Elementen.
|
| 2483 |
+
|
| 2484 |
+
**Suchalgorithmus**
|
| 2485 |
+
Algorithmus zum Finden von Elementen, Zuständen oder Lösungen.
|
| 2486 |
+
|
| 2487 |
+
---
|
| 2488 |
+
|
| 2489 |
+
# Geplante Hugging-Face-Spaces
|
| 2490 |
+
|
| 2491 |
+
Die Organisation **Algorithmen** kann eine kleine Anzahl praxisnaher deutschsprachiger Ressourcen bereitstellen.
|
| 2492 |
+
|
| 2493 |
+
## Algorithmen Explorer
|
| 2494 |
+
|
| 2495 |
+
**Geplant:** `algorithmen/algorithmen-explorer`
|
| 2496 |
+
|
| 2497 |
+
Interaktive Übersicht über Sortierung, Suche, Graphen, Dynamic Programming, Optimierung und KI-Algorithmen.
|
| 2498 |
+
|
| 2499 |
+
## Algorithmen Architektur
|
| 2500 |
+
|
| 2501 |
+
**Geplant:** `algorithmen/algorithmen-architektur`
|
| 2502 |
+
|
| 2503 |
+
Visuelle Karte von Datenstrukturen, algorithmischen Paradigmen und modernen AI-Systemalgorithmen.
|
| 2504 |
+
|
| 2505 |
+
## Komplexitäts-Check
|
| 2506 |
+
|
| 2507 |
+
**Geplant:** `algorithmen/komplexitaets-check`
|
| 2508 |
+
|
| 2509 |
+
Interaktive Orientierung zu Laufzeit, Speicher und Big-O.
|
| 2510 |
+
|
| 2511 |
+
## Algorithm Readiness
|
| 2512 |
+
|
| 2513 |
+
**Geplant:** `algorithmen/algorithm-readiness`
|
| 2514 |
+
|
| 2515 |
+
Bewertung von Korrektheit, Komplexität, Skalierbarkeit, Robustheit und Produktionsreife.
|
| 2516 |
+
|
| 2517 |
+
---
|
| 2518 |
+
|
| 2519 |
+
# Forschung und Kooperationen
|
| 2520 |
+
|
| 2521 |
+
Wir sind offen für technische Kooperationen, Open-Source-Projekte, Benchmarks, Datasets und gemeinsame Ressourcen rund um Algorithmen.
|
| 2522 |
+
|
| 2523 |
+
Besonders interessant sind:
|
| 2524 |
+
|
| 2525 |
+
- Algorithm Design
|
| 2526 |
+
- Datenstrukturen
|
| 2527 |
+
- Komplexitätsanalyse
|
| 2528 |
+
- Graphalgorithmen
|
| 2529 |
+
- Optimierung
|
| 2530 |
+
- Dynamic Programming
|
| 2531 |
+
- Search
|
| 2532 |
+
- Planning
|
| 2533 |
+
- Randomized Algorithms
|
| 2534 |
+
- Machine-Learning-Algorithmen
|
| 2535 |
+
- Reinforcement Learning
|
| 2536 |
+
- AI Systems
|
| 2537 |
+
- Algorithm Engineering
|
| 2538 |
+
|
| 2539 |
+
Willkommen sind Entwicklerteams, Open-Source-Projekte, Hochschulen, Forschungseinrichtungen, Infrastrukturteams und Unternehmen mit algorithmischen oder KI-bezogenen Anwendungsfällen.
|
| 2540 |
+
|
| 2541 |
+
**Kooperationen & Kontakt:** [ki-agenten@magenta.de](mailto:ki-agenten@magenta.de)
|
| 2542 |
+
|
| 2543 |
+
---
|
| 2544 |
+
|
| 2545 |
+
# Projektprinzipien
|
| 2546 |
+
|
| 2547 |
+
**Korrektheit vor Optimierung.**
|
| 2548 |
+
Ein schneller falscher Algorithmus ist wertlos.
|
| 2549 |
+
|
| 2550 |
+
**Komplexität sichtbar machen.**
|
| 2551 |
+
Laufzeit und Speicherbedarf sollten verstanden werden.
|
| 2552 |
+
|
| 2553 |
+
**Datenstruktur und Algorithmus gemeinsam denken.**
|
| 2554 |
+
Beide beeinflussen sich gegenseitig.
|
| 2555 |
+
|
| 2556 |
+
**Einfach vor kompliziert.**
|
| 2557 |
+
Die einfachste korrekte Lösung ist häufig die beste Ausgangsbasis.
|
| 2558 |
+
|
| 2559 |
+
**Messen statt raten.**
|
| 2560 |
+
Theorie sollte durch Benchmarks ergänzt werden.
|
| 2561 |
+
|
| 2562 |
+
**Randfälle gehören zum Design.**
|
| 2563 |
+
Robustheit entsteht nicht erst beim Testen.
|
| 2564 |
+
|
| 2565 |
+
**KI ersetzt algorithmisches Denken nicht.**
|
| 2566 |
+
Moderne KI-Systeme machen algorithmische Grundlagen sogar wichtiger.
|
| 2567 |
+
|
| 2568 |
+
**Skalierbarkeit ist Teil der Qualität.**
|
| 2569 |
+
Ein Verfahren sollte auch unter realistischen Lasten bewertet werden.
|
| 2570 |
+
|
| 2571 |
+
---
|
| 2572 |
+
|
| 2573 |
+
*Algorithmen ist eine unabhängige deutschsprachige technische Hugging-Face-Ressource zu Algorithm Design, Datenstrukturen, Komplexität, Optimierung, Machine Learning und algorithmischen KI-Systemen.*
|
| 2574 |
+
|
| 2575 |
+
**Stand: September 2026**
|