Hey can you guys do a trajectory on an ideal pathway to learning computational geometry, beginning with high school algebra?
@algorithmslabАй бұрын
The main prerequisite is basic knowledge of “algorithms and data structures”, and the prerequisites for that. Prerequisites for “algorithms and data structures” are basic programming skills (language does not matter, it is more about the concepts) and “high-school maths”++. So the pathsway would be: A. Introduction to programming B. Mathematics for Computer Scientists (must include proof techniques & basic probability theory) C. Introduction to Algorithms and Data structures And now you should be set. The more exposure you had to algorithms & basic maths, the easier it should be, but in principle the above should be sufficient. A and B are independent of each other, and may be known partially from school. “Mathematics for Computer Scientists” is of course a bit vague, but a solid mathematical foundation is crucial for algorithms. And sometimes a basic maths course for computer scientists does not yet include probability theory, so it might be necessary to learn that separately. All of the above are standard first-year courses in a computer science curriculum, so you will find plenty of excellent online resources. For Algorithms and Data Structures I also have videos, but there are also excellent MOOCs, e.g. from Princeton and Stanford. Finally, I do have a video where I list prerequisites for my advances algorithms course: kzfaq.info/get/bejne/pdOjpZBmmtSrZ6c.htmlsi=bwRs7wCMCA-8ZWgb I think this comes quite close to what I would expect for computational geometry.
@mayuincАй бұрын
@@algorithmslab thank you so much!
@SupanthaPandit-xs6lfАй бұрын
This is a great playlist. I love all your videos. Please share the playlist slides so I can adopt them in my course.
@algorithmslabАй бұрын
I switched to a different set of slides a while ago, and don't have these lying around anymore. If you send me an e-mail (to my TU Dortmund address), I could see whether I can help you with a different slide set (also based on the Cormen et al.)
@SupanthaPandit-xs6lfАй бұрын
Can you please provide the slides?
@algorithmslabАй бұрын
the slides are the second half of the following: github.com/kbuchin/slide-archive/blob/main/advanced-algorithms-2024/02-Amortized-Analysis.pdf
@user-nw9ch3zi9dАй бұрын
Professor, I was not able to understand how did you write the horizontal line segment comparison in status comparator as in the book (computational geometry algorithms and applications) on p. 26 it is written that horizontal line segments must be placed last, I am not sure how does your code work. But it works correctly as I have seen in my points test cases. Thanks and Regards
@algorithmslabАй бұрын
In the video I just gloss over this, so I assume you are referring to the Jupyter notebook. The comparator class there unfortunately turned out rather complicated, since it has to handle quite a few edge cases to make the code reasonable robust. The horizontal line segments are handled in the last two cases in the method "_check_special_cases". There one can see that a segment comes later in the comparison, when the y-coordinates of the two end points are (nearly) the same and the other segment is not to the right of the event point. The latter is necessary, because (as is written in the book) "If there is a horizontal segment, it comes last among all segments containing p".
@user-nw9ch3zi9dАй бұрын
@@algorithmslab yes proffesor I understood and wrote the code, it works. I wrote the code in cpp and it is really fast it takes about 1 second for brute force for 10000 segments. it is a lovely code you wrote. Thanks and Regards
@algorithmslabАй бұрын
@@user-nw9ch3zi9d great to hear, thanks! (And the code was written by the other author of the notebook, so I will pass on the compliment)
@ShiyuLi-fh2ssАй бұрын
Very amazing! Before seeing the video, I could not get the physical meaning of the dual variables of the LP. The visualization is fantastic! The whole lecture is clear and inspired.
@algorithmslabАй бұрын
Thank you! Happy to hear this.
@baddie39822 ай бұрын
to the point and concise, really helpful. thanks!!
@martablank85142 ай бұрын
Thank you so much for this video!
@DanielWood2 ай бұрын
Excellent video, really well explained, with clear examples. Thank you.
@ultramelon39602 ай бұрын
SOO helpful! thanks!
@algorithmslab2 ай бұрын
great to hear, thanks!
@evitaemort2 ай бұрын
Servus
@algorithmslab2 ай бұрын
Glück auf
@ShivangSharma-ih9yg3 ай бұрын
sir I very very love u 😘😘
@algorithmslab3 ай бұрын
Happy to hear that the videos are helpful!
@fatinsadab38213 ай бұрын
very good explanation. thank u sir
@fndTenorio3 ай бұрын
Very good presentation, thanks!
@dmytrodieiev93383 ай бұрын
But wait, how did you fix the RB properties at 17:56, if #5 is violated? "For each node, all paths from the node to descendant leaves contain the same number of black nodes".
@algorithmslab3 ай бұрын
The important observation here, is that #5 is actually never violated (i.e. assuming it holds at the beginning, all operations that we do don't break it). When inserting a new node, we make it red. So assuming that I had a correct tree before, the only violation that I now might have is one red child-parent pair. This is fixed in "Step 3". For all operations in Step 3 it is quite clear that they don't introduce a violation of #5. Only for the last rotation (the right rotation on the slide) we have to be careful. There we recolor z and b. But I explain, starting at 17:18, why property #5 still holds, assuming it was true before. So in short, the recoloring of z and b is what we do to make sure that #5 is not violated. I hope this answers the question.
@sunandachowdhury14553 ай бұрын
Can you kindly explain how the potential difference in case of linking in -c??
@algorithmslab3 ай бұрын
Linking means that I take one of the trees and make it a subtree of another tree by connecting it via an edge to the root of that tree. That means that by linking the number of trees goes down by one. So if the number of trees before linking is some number k, it is k-1 after linking. The potential is c* number of trees. So before linking the potential was c*k, and after the linking it is c*(k-1) = c*k - c. The change in potential is therefore (c*k - c) - c*k = - c.
@sunandachowdhury14553 ай бұрын
@@algorithmslab Thanks!
@j-p-d-e-v3 ай бұрын
Even though I dont understand some of the terms you use (its me on since Im not that good in DSA) but as a whole I like the way you explain things. Im currently studying DSA.
@algorithmslab3 ай бұрын
Thanks! This video is part of a series, and it is probably a good idea to first watch the video that introduces binary search trees (kzfaq.info/get/bejne/p696dtKSudishn0.htmlsi=N-9x-yNDKw8VcHmi) Success with studying Data Structures and Algorithms!
@ahmad-koye3 ай бұрын
Thank you😊 ❤
@jermelwatson93993 ай бұрын
Best explanation I got from my 1hr of searching!!!
@offswitcher31593 ай бұрын
Great video!
@user-hg4fs2ik5c4 ай бұрын
2024 & you're still helping TU/e students! Thanks!
@soumyachakraborty4 ай бұрын
Can we get the pdfs of the slids? Just like the Data Structure once
@algorithmslab4 ай бұрын
okay, I didn't really have a good place to point at, but this should work for now: github.com/kbuchin/slide-archive
@soumyachakraborty4 ай бұрын
@@algorithmslab Thank a lot sir!!
@soumyachakraborty4 ай бұрын
Your ways of teaching as well as the slides are absolutely awesome. If I get your slides PDF available, it would enlighten me a lot!!
@algorithmslab4 ай бұрын
Thanks! In the video description there is a link to the copy of the course (canvas.instructure.com/courses/3752774). It also contains the slides; for each unit, the slides are in the unit summary at the start of the unit. As a direct link to this slide set, the following should work: canvas.instructure.com/files/158068175/download?download_frd=1
@oguzcetin3494 ай бұрын
My analysis of algorithm teacher directly use your pdf to teach us.NO JOKE
@algorithmslab4 ай бұрын
That's great to hear! It is great to see that they are being used, just like I am happy that people find this videos useful. I also like reusing slides from colleagues.
@FlashTheMusik4 ай бұрын
Thanks for the video! I was wondering for the Min cut - Max Flow LP why the Cut that was displayed in 40:21 did not look minimal to me. The edges that are cut (in the original graph in 29:47) have a summed up cost of 12 whereas cutting away the vertices so the new connected components are {o, a} and {b, c, d, e, n} would have a min cut cost of 4 which is equal to the max flow of the network. Did I miss something in the example?
@algorithmslab4 ай бұрын
It does not look minimal, because it is not minimal. In the video (at 40:21), I just wanted to show a cut to demonstrate the constraints; it was not intended to be minimal (sorry, if that wasn't clear). The cut fulfills the constraints of the ILP (if setting at least y_{2,5}=1, y_{4,5}=1 and y_{3,6} = 1) , but its objective value is 5 (= 1 + 2 + 2). Indeed, setting u_0=0 and u_2=0 and all other u_i=1, corresponds to the cut {o,a} and {b,c,d,e,n}, which results in an objective value of 4. Just one more remark about my cut, which was actually not intentional but is okay: it has the edge from 6 to 4, where we now go from a "1" to a "0". But that is okay since 0 - (-1) = 1 >= 0. I hope this clarifies the example and answers your question!
@FlashTheMusik4 ай бұрын
Yeah that clears things up! Thanks for taking the time to write such an elaborate answer!@@algorithmslab
@stevenshi90124 ай бұрын
thank you for making this video, it really helped me to understand the proof behind the steiner tree approximation algo!
@scuraballthetrueone4 ай бұрын
First!
@FlashTheMusik4 ай бұрын
Thank you so much for putting this series online! I'm rewatching this for my advanced algorithms class and it's so helpful!
@roopamtaneja4 ай бұрын
Love the explanation for dynamic tables accounting method
@algorithmslab4 ай бұрын
Happy to hear this, thanks!
@FedaHz4 ай бұрын
Thank you so much. You covered almost half of my semester in only one video. Although I still haven't comprehended the proofs quite clearly but at least I know where to look.
@algorithmslab4 ай бұрын
Great to hear that it's helpful! This video covers parts of three chapters from the Vazirani book (13,14,15), so I fully see how this could be spread out over several lectures. My aim here was to give a first overview of LP-based techniques for approximation algorithms.
@ascyrax85075 ай бұрын
awesome vid :)
@user-zj9pq5xc7x5 ай бұрын
amazing lecture. learnt so much in just 45 minutes. thank you
@algorithmslab5 ай бұрын
That's great to hear!
@user-uy1sl4sk3f5 ай бұрын
Could you please give me an idea, how the base-3 counter amortized cost will be calculated here? I am getting, Ci = 2, Potential change = 2. So, amortized cost = 4. Is it okay?
@algorithmslab5 ай бұрын
This doesn't quite work, because Ci might not be constant. The first question you need to do is to define an appropriate potential function. For the binary counter it was the number of 1s, but here it has to look different (Hint: It has to involve the number of 2s. It can also involve the number of 1s.) c_i is the actual cost. Just like for the binary counter, this may vary, i.e., it is not necessarily constant. The trick then is (again like for the binary counter) to make sure to have defined the potential function in such a way, that whenever the counter has to change many digits, that then the potential drops by a similar number. This is a nice exercise.
@user-uy1sl4sk3f5 ай бұрын
Thanks!
@Michael-cq7ze5 ай бұрын
Thanks a lot for this video, very well explained and easy to follow. It helped me a lot!
@user-uy1sl4sk3f5 ай бұрын
Thanks a bunch!
@nicksonmakama6 ай бұрын
Thank you Prof. I only wish that for just that are just starting now, some code be shown and explained so we’d have a glimpse of how to actually mod this in code
@algorithmslab6 ай бұрын
We are working on a collection of Jupyter notebooks for the algorithms presented in the videos. I nice feature is that they don't just provide the code but also lets you visually explore the algorithms step by step. The repository is here: github.com/ls11ae/geoalg-notebooks Specifically, for line segment intersection the notebook is here: nbviewer.org/github/ls11ae/geoalg-notebooks/blob/master/notebooks/02-LineSegmentIntersection.ipynb To modify it and to use the interactive elements, you can use binder (and wait a bit) or simply download the repo.
@gawadahmed37226 ай бұрын
you are a legend!
@hakan64496 ай бұрын
This video is proof that you don't need a 50 minute MIT lecture to teach something so simple!
@jaden5206 ай бұрын
Promo`SM
@thaynaemillycavalcantesant36876 ай бұрын
Great lecture. Thank you!
@algorithmslab6 ай бұрын
Happy to hear, thanks!
@daydreamer17226 ай бұрын
underrated channel, helps me a lot
@algorithmslab6 ай бұрын
Great to hear!
@NoOne-jl2ii6 ай бұрын
Thanks a lot!!
@NoOne-jl2ii6 ай бұрын
Thanks for the video! Keep up the good work.
@algorithmslab6 ай бұрын
Thanks for commenting!
@halalgunna10237 ай бұрын
this is slept on. what a fantastic explanation. you're the man!
@algorithmslab7 ай бұрын
great to hear, thanks!
@user-jz8fp3su7c7 ай бұрын
Thank you, it is a detailed explnation
@kingnavidplays38867 ай бұрын
Completely WRONG! You forgot to multiply i to Prob(#prob>i) in expectation formula!
@algorithmslab7 ай бұрын
I am not completely sure, whether I understand your comment correctly, but there is no factor i in the sum(Prob(#prob>i)). This corresponds to the sum at the bottom at 01:55, see e.g. also Theorem 1 here: www.cs.princeton.edu/courses/archive/fall02/cs341/lec22.pdf .
@da605117 ай бұрын
why c_i of the insert is 1 + "k"? do these k trees do any operation?
@algorithmslab7 ай бұрын
I assume you are referring to approx. timestamp 14:00? Insert creates a tree of size 1, and then takes the union of this tree with the trees of the previous heap. Now, for instance, lets assume we are inserting the 8th element. Then the previous binomial heap had 7 elements, and consisted of a tree of size 1, a tree of size 2, and a tree of size 4. Insert will now link the new tree of size 1 with the existing heap of size one, resulting in a tree of size 2. Because there is already a tree of size 2, we link this with the existing tree of size 2, resulting in a tree of size 4. This we link with the existing tree of size 4, finally getting a tree of size 8. Here is a cute animation of this process: www.chrislaux.com/binomialheap Thus, for each of the trees that we "iterate through", we do one link operation. Link operations take constant time. So, this contributes O(k) to the actual cost, and this is captured by the "+k" in c_i. Does that answer your question?
@da605117 ай бұрын
@@algorithmslab Yes you answered my question. Thank you very much ! I finally understand 😊
@da605117 ай бұрын
thanks a lot save me for my algo exam
@algorithmslab7 ай бұрын
Thanks for your comment, happy to hear this!
@hummingbird59648 ай бұрын
Number of links are three number of joints are 2 3(n-1)- 2J1 3(3-1)-2(2) 2 Axxording to gruebler;s formula that first link is fixed though