The comments repeat themselves, but: What a great explanation! Hammers everything important into the brain in no time!
@sandrocksd956525 күн бұрын
1:11:45 “Wer den Schal vor der Unterhose anzieht hat die Kontrolle über sein Leben verloren” 😂 made my Vorlesung
@djin8767Ай бұрын
Beim one sided crossing minimization problem beim ILP das ganze was minimiert werden soll du sagst das die kreuzungen zählt aber zählt nicht nur der rechte part zu dem du gesagt hast er sei konstant die crossings ? Bzw. was macht der linke part und was der rechte?
@PhilippKindermann22 күн бұрын
Der linke + rechte Part ergeben zusammen die Anzahl der Crossings. Wir machen da eine Umfornung: Die Anzahl der Crossings ist: [Summe über c_ij x_ij + c_ji x_ji]. Wegen x_ji = 1 - x_ij folgt: [Summe über [c_ij x_ij + c_ji (1 - x_ij)] = [Summe über c_ij x_ij + c_ji - c_ji x_ji] = [Summe über (c_ij - c_ji) x_ij + c_ji] = [Summe über (c_ij - c_ji) x_ij] + [Summe über c_ji]. Der rechte Teil [Summe über c_ji] ist konstant, also zählen wir im ILP nur den linken Teil. Um dann am Ende die exakte Anzahl der Kreuzungen zu bekommen, muss man noch [Summe über c_ji] draufaddieren. Alternativ kann man [Summe über c_ji] auch vorberechnen und in der Zielfunktion des ILPs draufaddieren.
@sergiocaladАй бұрын
Excelent explanation. Can you explain Vatti's algorithm?
@cezeryerakАй бұрын
You are great! I remember the Computational Geometry and Optimization lectures I got for three semesters. Maybe your professors were mine as well :D
@TrippleXD5452 ай бұрын
bro that last name is great
@benjaminlehmann2 ай бұрын
Minor correction for views: 2m12s meant to say - "at every face, there should be at *least* 3 edges." As stated on earlier slide.
@PhilippKindermannАй бұрын
You're right, thank you!
@28ikenna12 ай бұрын
When following the iterative heuristic, how are you accomplishing edge straightening? Are you using the quadratic program mention earlier? I assumed the heuristic was to avoid the using the quadratic program. Loved the video series!
@PhilippKindermannАй бұрын
No, this step is much simpler (and thus not optimal): similar to the crossing minimization, you just go through the layers bottom-up, then top-down, and so on. For each layer, you look at the dummy vertices and see if you can move them to remove bends. You do that until there are no more local improvements you can do.
@benjaminlehmann2 ай бұрын
So excited to find these videos! Thank you!
@nainibrok91392 ай бұрын
Ein Student der Uni Passau dankt ;)
@hannahnelson45692 ай бұрын
Clever!
@hannahnelson45692 ай бұрын
This is cool!
@sherlzspi4312 ай бұрын
Sehr hilfreich👍
@Martin-vy4bj2 ай бұрын
49:48
@arindampareek14452 ай бұрын
Where can we find the exercise/proofs solutions?
@Nonameeeeeaaeeaeww3 ай бұрын
Im Algorithmus von InsertionSort J=2 am Anfang also sollte A[j]=4 sein oder ? Warum steht A[j]=3 ? Also key =3 und nicht key=4 weil wir Index 2 haben
@PhilippKindermann3 ай бұрын
Bei dem Beispiel bin ich schon in der Mitte eingestiegen, also bei j=5. Ich bin davon ausgegangen, dass wir j=2,3,4 schon erledigt haben.
@torcher50233 ай бұрын
well, this thing is kinda hard to be implemented
@PhilippKindermann3 ай бұрын
It definitely is! Here are a few links that might help you: gist.github.com/rmukh/cbfee78cbfbe73a36638a409726b7a84 codeforces.com/blog/entry/81768 github.com/leomccormack/convhull_3d
@ultramelon39603 ай бұрын
this is an amazing series! Thank you!
@maaroofashkar16483 ай бұрын
mr G ometer ! nice word play
@fridericusrex98123 ай бұрын
Best explanation on KZfaq.
@shivanshujain60743 ай бұрын
very helpful. thank you very much
@skittles64863 ай бұрын
Thank you very much Philipp. These are one of the most amazing video lecture series and I am grateful that you made it public.
@TheHalveTamme3 ай бұрын
Thank you for the videos, they are a great help. Eades paper can befound via Google Scholar: www.cs.ubc.ca/~will/536E/papers/Eades1984.pdf
@octaalma4 ай бұрын
Excellent video Phillip! Do you happen to have a source for the algorithm that you used 8:38 in the video?
@PhilippKindermann4 ай бұрын
Thank you! For this part, I've been following (with some modifications) chapter 4 "Drawing on Physical Analogies" by Ulrik Brandes in the book "Drawing Graphs: Methods and Models" edited by Michael Kaufmann and Dorothea Wagner: link.springer.com/chapter/10.1007/3-540-44969-8_4
@SiiKiiN4 ай бұрын
I implemented this function based on the equations in the videos and it wouldn't solve for the graph. I realized the in both the repulsive and attractive should have the distance be squared. There should be no l^2.
@PhilippKindermann4 ай бұрын
Hey, that's interesting! Which graph and which parameters did you use? I tried my test graphs with both l^2 and distance^2, but both variants gave me almost the same drawing. In every source I can find, including the original paper, they square l and not the distance in the repulsive force. This is from the original paper, where their k is our l and their x is the distance between u and v: function f_a(x) := begin return x^2/k end; function f_r(x) := begin return k^2/x end; See, e.g., onlinelibrary.wiley.com/doi/epdf/10.1002/spe.4380211102 cs.brown.edu/people/rtamassi/gdhandbook/chapters/force-directed.pdf arxiv.org/pdf/1201.3011.pdf algo.uni-trier.de/demos/forceDirected.html / algo.uni-trier.de/demos/script/algorithm/fruchtermanReingoldAlgorithm.js
@sayanbaidya97242 ай бұрын
did you take mod(distance) or just distance ?
@PhilippKindermann2 ай бұрын
@@sayanbaidya9724 I'm not sure what you mean by mod(distance). Do you mean abs(distance)? distance should always be positive. I calculate sqrt( (v.x - u.x)^2 + (v.y - u.y)^2 ).
@sayanbaidya97242 ай бұрын
@@PhilippKindermann Hi I was asking the original person who commented whether he took mod or not as results come same if I take mod(distance) or distance ^2. Yes you are right, it should always be positive value.
@tysonbeach28694 ай бұрын
What is the purpose of bounding shapes? Is it to represent more complex structures when you draw sp graphs at a high level? Or is it more theoretical. I can't seem to find an answer for that anywhere.
@PhilippKindermann4 ай бұрын
Hey, the bounding triangle is crucial so that we can plug subdrawings together at the P- and S-nodes. Without them, we don't know how the drawings look like and how to combine them. This is a common approach when you have an inductive or recursive algorithm that follows some graph decomposition.
@balthasar18674 ай бұрын
timestamps würden die Vorlesung nochmal immens verbessern, aber das ist auch so schon mit Abstand die beste Vorlesung zu Algo, die öffentlich verfügbar ist
@PhilippKindermann4 ай бұрын
Danke! Wenn ich etwas Zeit hab, pack ich bestimmt auch mal Timestamps dazu... ^^'
@concoursmaths82704 ай бұрын
amazing!!!!!
@balthasar18675 ай бұрын
Diese Vorlesung ist sooo viel besser als die an meiner Hochschule
@KotoOo5 ай бұрын
Wonderful to have the whole bunch of lectures that ain't giving a bit of spoiler how to practically implement any useful graph laying out strategies, keeping the codebase tight and clear ... =^_^= in 2024, what libraries could you recommend for generating useful / universal graph layouts? what programming language(s) has got the most advanced solutions for the area? are there any GPU-based solutions?
@PhilippKindermann5 ай бұрын
For simple layouts there are many options, for example: Javascript: - d3.force: d3js.org/ - sigma.js: www.sigmajs.org/ - vis.js: visjs.github.io/vis-network/examples/ - dracula: github.com/strathausen/dracula Python: - networkx: networkx.org/ - Pyvis: pyvis.readthedocs.io/en/latest/index.html - Jaal: github.com/imohitmayank/jaal - ogdf-python: github.com/ogdf/ogdf-python Java (wouldn't recommend it): - JGraphX: github.com/jgraph/jgraphx C/C++: - OGDF: github.com/ogdf/ogdf/ - LEDA: www.algorithmic-solutions.info/leda_guide/GraphWin.html I'm aware of 2 GPU-based solutions, but haven't really tried them out yet. - cugraph: github.com/rapidsai/cugraph/blob/main/notebooks/algorithms/layout/Force-Atlas2.ipynb - GraphWaGu: www.willusher.io/publications/graphwagu I think that the two most powerful library are the open-source OGDF(ogdf.uos.de/), available for C++ and Python, and the commercial yFiles (www.yworks.com/products/yfiles), available for JavaScript, Java, and C#.
@theelysium15976 ай бұрын
Our (i.e. at my university) algorithm was a little different. We used [..., m+1] and [m-1, ...] for the points that are still to be sorted in - effectively excluding the median for future iterations. Also we drew lines so that every point had a line in the end. Not sure if those are just minor alterations, but just in case someone else stumbles upon this.
@ddx-gl3su6 ай бұрын
Great Explanation!
@ElAbdu6 ай бұрын
Vielen Dank
@Fruitzebraa6 ай бұрын
Thanks for sharing the course videos! Just wondering what's the tool you were using to draw graphs in the video, the one that has grid and you can move them around?
@PhilippKindermann6 ай бұрын
Hey! I created the slides with ipe and I'm showing the ipe editor window, so I can edit everything on the fly: ipe.otfried.org/ You can download the slides from algo.uni-trier.de/lectures/graphvis and directly open them in Ipe
@Fruitzebraa6 ай бұрын
Thanks for sharing the tool and slides, Philipp! It's a very nice tool.@@PhilippKindermann
@addofmwdwdw6 ай бұрын
Danjke für dein Video, liebe Grüße
@siradjbenam7 ай бұрын
Please the name of the software used in this lecture
@PhilippKindermann7 ай бұрын
I used Ipe (ipe.otfried.org/) to create the slides and Camtasia (www.techsmith.com/video-editor.html) to record and edit the video.
@siradjbenam7 ай бұрын
@@PhilippKindermann big thank sir i do the same course for master 1 in my country and your courses are for me a big support
@mostafaismail36787 ай бұрын
This is very useful to a task I'm currently working on. I'm so glad you've made these awesome lectures public! Thank you so much <3
@gabealberro60817 ай бұрын
fantastic
@MyAnno14047 ай бұрын
Mr. Kiderman, if i have a street map and i want to divide the map into regions where each region represents the area where a certain street is closest how would i approach that? It seems the voronoi diagram cannot work in this case - only if i subdivide the street into alot of points (seems ugly) - is there a solution for this problem?
@PhilippKindermann7 ай бұрын
There's algorithms for Line Voronoi Diagrams (Voronoi Diagrams of Line Segments). See for example this paper: people.mpi-inf.mpg.de/~mehlhorn/ftp/VoronoiLineSegments.pdf There's an implementation for ArcGIS: github.com/UNTGeography/VoronoiDiagramsGIS It's implemented in the Boost C++ Library: www.boost.org/doc/libs/1_75_0/libs/polygon/doc/voronoi_main.htm And there are wrappers for Python: github.com/fabanc/pyvoronoi and for C#: github.com/fabanc/SharpBoostVoronoi
@innokentiyromanchenko14508 ай бұрын
how to find arc in 2:30?
@taggosaurus8 ай бұрын
Thank you from the bottom of my heart from India.
@harishsatishchandra8 ай бұрын
These videos are amazing! Is it possible to get the slides? The link for the slides in the description appears to be dead
@PhilippKindermann8 ай бұрын
Thank you! You can find the slides here: algo.uni-trier.de/lectures/algeo/slides/
@axelman03168 ай бұрын
Thanks I learned a lot !! :D
@TheClockmister9 ай бұрын
The time to calculate the overlap of two polygons is O((n + I) log(n)) time. So why recurse and get log^2(n) time? What am I missing here?
@PhilippKindermann9 ай бұрын
The O((n + I) log n) = O(n log n) running time is to intersect two convex regions. But we have n convex regions (half planes) that we have to intersect. We do that via divide-and-conquer (like MergeSort), which adds an additional log n factor.
@TheClockmister9 ай бұрын
@@PhilippKindermann Thanks a lot, I have been searching for an explanation for about an hour. Thanks a lot, I wish the textbook had a worked out an example tho... ):
@jonathanbiren63679 ай бұрын
Thank you for your great work, Mr. Kindermann. Such a niche topic, that is yet so relevant to many aspects of computer and data science.
@prashantsingh-wg2vn9 ай бұрын
Sir, which tool do you use to make presentations? It will be helpful in my masters.
@PhilippKindermann9 ай бұрын
Hey, I use the vector drawing program ipe: ipe.otfried.org/ You can also open all my slides with the program
@prashantsingh-wg2vn9 ай бұрын
@@PhilippKindermann Thank you.
@Code4Ever10 ай бұрын
I expected the first Data Structure to be a maxHeap, since it will be way easier to get this done through a heap where we just need the maximum intersection point. Great explanation nonetheless
@PhilippKindermann9 ай бұрын
The reason I didn't use a MaxHeap is that deletion cannot be done trivially in logarithmic time. Otherwise a MaxHeap would be easier, that's true.
@XahhaTheCrimson10 ай бұрын
Thank you sir you saved a random undergraduated student tortured by geometry-related development...
@joaquinp517610 ай бұрын
The end drawing in the example after adding the curves has the cycles back. Why is that? The cycle removal process is not permanent?
@PhilippKindermann10 ай бұрын
You only remove the cycles such that a hierarchical drawing exists. But if you want to display the original graph at the end, you have to revert these changes.
@joaquinp517610 ай бұрын
Are series-parallel suitable for modeling large state diagrams?
@PhilippKindermann10 ай бұрын
Many state diagrams are series-parallel, but in general they don't have to be.