Talk:Graham scan
Graham scan was nominated as a good article, but it did not meet the good article criteria at the time (February 11, 2008, reviewed version). There are suggestions below for improving the article. If you can improve it, please do; it may then be renominated. |
Graham scan was a good article, but it was removed from the list as it no longer met the good article criteria at the time. There are suggestions below for improving the article. If you can improve it, please do; it may then be renominated. Review: October 23, 2005. (Reviewed version). |
Error on this page
On couple places were <math> tag is used there is an error:
"Failed to parse (Cannot write to or create math output directory): (x_1,y_1) , Failed to parse (Cannot write to or create math output directory): (x_2,y_2)"
I've copied the document's code into the sandbox, and there worked fine... —Preceding unsigned comment added by 78.3.221.164 (talk) 12:53, 23 January 2009 (UTC)
Applications
would be interesting to add to this article what its practical applications are. Graham 23:16, 15 Mar 2004 (UTC)
Are they different from those of the result, the convex hull? Frencheigh 22:59, 18 Mar 2004 (UTC)
- Yes, of course. Why would I need to find the convex hull of a set of points? In other words, what is the practical application of this? Graham 23:57, 18 Mar 2004 (UTC)
- Well, it would make more sense to put those on the Convex hull page, I think (where there are already some sort of vague applications). Frencheigh 01:18, 19 Mar 2004 (UTC)
Subtle errors
On the Wikipedia:Featured article candidates page I wrote that the article contains subtle errors. They do not invalidate the main idea, but may lead to confusion. Most of them are related to treating of degenerate cases. The best way to deal with them is to break the description into four parts.
- case of points in general position, for the most transparent exposition of the main idea
- hints for treating degenerate cases (something about 3 points on a line is already mentioned)
- hints for treating precision of real-life computer computations
- hints for speed-up of particular steps
Still another problem is in description of computational complexity. While the general idea is correct, the description is wrong. In fact, it could be a good idea to illustrate the method of amortized analysis in computational complexity theory by applying it to gracham's scan. I promised to fix the article, but unfortunately I am seriously distracted from work in wikipedia now, sorry. Mikkalai 05:20, 21 Mar 2004 (UTC)
- Then is the "the loop", actually, as the article says, O(n)? If so, would the use of radix sort make the algorithm O(n), rather than O(n log n)... Frencheigh 22:00, 6 Jun 2005 (UTC)
- You cannot sort in O(n), so no. But yes, the loop is O(n). — Timwi 15:23, 9 Jun 2005 (UTC)
- Please keep in mind that you can use radix sort usefully, if point coordinates are integers and scaled to range [0, O(n)]. In particular, since Graham scan sorts the angles, you are nowhere. However if you do have points with "good" integer coordinates, there are variants of Convex Hull algorithm that do better. Also, the fact that Gracham's requires computation of angles, the algorithm, being nice theoretically, in practice has problems with robustness. mikka (t) 17:53, 9 Jun 2005 (UTC)
- The range "[0, O(n)]" doesn't make any sense. Any finite number n of points is always in the interval [-kn, kn] for some k. Graham's scan does not require computation of any angles. — Timwi 19:51, 9 Jun 2005 (UTC)
- The range does make sense, if one recalls that the whole "O" terminology makes sense only in an asymptotic case, i.e., when we have an infinite (say, reasonably large) series of problem instances. If we speak about one isolated problem, then all algorithhms are O(1). Graham scan does require computation of either angles (as written in the article) or comparison of tangent values (if one is smart enough), which has the same problem with real numbers (usage of integers leads to overflow problems). The version that does not require angular sort has a different name. mikka (t) 20:28, 9 Jun 2005 (UTC)
- I have no idea what your interval is supposed to mean. This is an algorithm that is applied to one set of points, not a sequence of sets of increasing size. Regardless, no matter what you do, you can't sort in O(n). That's a fact. — You do not need to use "real" (floating-point) numbers anywhere in Graham scan (unless of course the input is already floating-point). Look at the fourth paragraph in the algorithm section. — Timwi 08:33, 11 Jun 2005 (UTC)
- Timwi, you should look up Radix sort. The O(n.log n) bound only applies to comparison based sorts. 99.74.82.46 (talk) 03:08, 22 October 2009 (UTC)
- I have no idea what your interval is supposed to mean. This is an algorithm that is applied to one set of points, not a sequence of sets of increasing size. Regardless, no matter what you do, you can't sort in O(n). That's a fact. — You do not need to use "real" (floating-point) numbers anywhere in Graham scan (unless of course the input is already floating-point). Look at the fourth paragraph in the algorithm section. — Timwi 08:33, 11 Jun 2005 (UTC)
- The range does make sense, if one recalls that the whole "O" terminology makes sense only in an asymptotic case, i.e., when we have an infinite (say, reasonably large) series of problem instances. If we speak about one isolated problem, then all algorithhms are O(1). Graham scan does require computation of either angles (as written in the article) or comparison of tangent values (if one is smart enough), which has the same problem with real numbers (usage of integers leads to overflow problems). The version that does not require angular sort has a different name. mikka (t) 20:28, 9 Jun 2005 (UTC)
- The range "[0, O(n)]" doesn't make any sense. Any finite number n of points is always in the interval [-kn, kn] for some k. Graham's scan does not require computation of any angles. — Timwi 19:51, 9 Jun 2005 (UTC)
- Please keep in mind that you can use radix sort usefully, if point coordinates are integers and scaled to range [0, O(n)]. In particular, since Graham scan sorts the angles, you are nowhere. However if you do have points with "good" integer coordinates, there are variants of Convex Hull algorithm that do better. Also, the fact that Gracham's requires computation of angles, the algorithm, being nice theoretically, in practice has problems with robustness. mikka (t) 17:53, 9 Jun 2005 (UTC)
- You cannot sort in O(n), so no. But yes, the loop is O(n). — Timwi 15:23, 9 Jun 2005 (UTC)
Diagram request
A diagram indicating which points have been labelled p1 p2 and p3 when calculating the cross product would be cool, i dont have the time atm, maybe later 61.68.3.133 11:13, 3 January 2006 (UTC)
Delisted GA
There are no images, there are no references. slambo 17:28, 23 October 2005 (UTC)
- I added an illustration. It isn't very cute, but illustrates the main point of the algorithm. Imbaczek 22:52, 21 January 2006 (UTC)
Ref: Note 1
When does the check mentioned in Note 1 come into play? I dont think this check is necessary.
collinear points
The convex hull article defines the problem as the minimal set. If this is true, then it does indeed matter whether you throw out a point when it's between two others; you must.
- A convex set includes all Euclidean points inside convex boundaries. There is an infinite number of them, not only those you explicitly specified to build the convex hull. So the important thing is the boundary, not in how many points you define that boundary. SnakeScaly (talk) 16:31, 12 May 2009 (UTC)
Failed Good Article review
GA review – see WP:WIAGA for criteria
This article needs significant improvement to meet the Good article criteria. The major areas where it is lacking are breadth of coverage and overuse of jargon. Though it is difficult for highly technical articles such as this, recall that all wikipedia articles must strive to be accessible for a general audience.
- Is it reasonably well written?
- A. Prose quality:
- The explanation of the algorithm is very difficult to follow. I suggest starting by clearly defining the goal of the algorithm, which can then be referenced during the explanation. Also, the image looks good, but it and the textual explanation need to mesh better, with the text referencing steps clearly indicated in the image.
- B. MoS compliance:
- This is where the article needs the most improvement. All technical terms which are necessary to the points being made must be sufficiently explained in this article so that a general reader can follow the prose without having to follow wikilinks. For example, the article begins "The Graham scan is a method of computing the convex hull of a given set of points in the plane with time complexity O(n log n)", yet the terms "convex hull", "plane", "time complexity" or "O(n log n)" aren't even cursorily explained anywhere in the article. For more guidelines and suggestions on avoiding and clarifying jargon, see wikipedia:Explain jargon, Wikipedia:Make technical articles accessible, and Wikipedia:Technical terms and definitions.
Secondarily, the pseudocode section needs to be brought up to manual of style standards. The "Note:", "Note2:" convention, for example, should be changed to paragraph format.
- This is where the article needs the most improvement. All technical terms which are necessary to the points being made must be sufficiently explained in this article so that a general reader can follow the prose without having to follow wikilinks. For example, the article begins "The Graham scan is a method of computing the convex hull of a given set of points in the plane with time complexity O(n log n)", yet the terms "convex hull", "plane", "time complexity" or "O(n log n)" aren't even cursorily explained anywhere in the article. For more guidelines and suggestions on avoiding and clarifying jargon, see wikipedia:Explain jargon, Wikipedia:Make technical articles accessible, and Wikipedia:Technical terms and definitions.
- A. Prose quality:
- Is it factually accurate and verifiable?
- A. References to sources:
- B. Citation of reliable sources where necessary:
- Only a single in-line reference at the end of the first sentence. To be a "well-referenced" article, at minimum, the article must provide in-line citations from reliable sources for statistics, counter-intuitive statements that could be challenged.
- C. No original research:
- The pseudo-code example should be attributed to a referenced source, otherwise it qualifies as original research.
- A. References to sources:
- Is it broad in its coverage?
- A. Major aspects:
- As mentioned already on the talk page, to be considered broad it coverage this article would need to include a section on the useful applications of the Graham scan algorithm. Yes, this will mean redundancy with convex hull, but that's no a problem. In fact, in order to improve the accessibility, an entire section (briefly) explaining what a convex hull is would be useful, and applications would fit well there. Another subject that could be explored is where Graham scan fits in the history of convex hull algorithm.
- B. Focused:
- A. Major aspects:
- Is it neutral?
- Fair representation without bias:
- Fair representation without bias:
- Is it stable?
- No edit wars, etc:
- No edit wars, etc:
- Does it contain images to illustrate the topic?
- A. Images are copyright tagged, and non-free images have fair use rationales:
- B. Images are provided where possible and appropriate, with suitable captions:
- A. Images are copyright tagged, and non-free images have fair use rationales:
- Overall:
- Pass or Fail:
- Once the issues above have been addressed, I suggest the article be taken to peer review for feedback before renomination as a good article.
- Pass or Fail:
--jwandersTalk 04:27, 12 February 2008 (UTC)
Delisted - and good for it
Obviously the article was not reviewed by an expert in computational geometry. The description of the algorithm has numerous problems I will not even start to list here. I will better rewrite it in my free time. It is OK-ish for the first read about the algorithm, but ... `'Míkka>t 04:54, 12 February 2008 (UTC)
Cross product ?
Cross product is only defined in 3- and 7-dimensional space. What you use here to test for collinearity/turn direction is a dot product with one vector turned 90 degrees. So for points p1, p2 and p3:
Since , you get the final formula:
SnakeScaly (talk) 16:31, 12 May 2009 (UTC)
Whoever wrote the above, interpret the cross product of x x in 2D as .
If then is anti-clockwise from and if then is clockwise from .
Clearly, if , the two vectors are parallel.
Animating GIF image
I was working on some personal web pages, and I made an animating gif image of the Graham scan process, I thought it might add to the quality of the page to include it. Here is a link to it, feel free to use it if someone cares to edit the main page.
link image —Preceding unsigned comment added by David Ashley (talk • contribs) 21:22, 8 October 2009 (UTC)
Pseudo-code example is confusing
I'm trying to implement this algorithm in the Ruby language for use inside Google's SketchUp. I think I understand the algorithm itself, but I'm having trouble deciphering the pseudo-code.
My first problem is with the array. Do the indices go a) from one to the number of points, b) from zero to the number of points minus one, or c) something else? For example, when it refers to points[1] during the first step (finding the lower-left point) is it referring to the first point in the list, or the second? And then, when it refers to points[0], is that a new point that was added to the front of the list?
Also, what does "We want points[0] to be a sentinel point that will stop the loop." mean? Is there supposed to be a test that will exit the for loop early? Is this "sentinel point" even necessary? Which point is it and where is it supposed to be inserted in the array?
No offense to the original author (nor to Sedgewick or Wayne) but could someone else who understands this algo make some new (or clarify the existing) pseudo-code?
Thanks a lot to anyone who has worked on or will work on this article (except Altenmann, who is a ***) (all the other references to this algo I could find are even less comprehensible!)
75.28.168.96 (talk) 22:13, 27 October 2009 (UTC)
- Sorry, this is an encyclopedia, not student advisor. I deleted the pseudocode, because it is incorrect. If you need it for job, I am sure you will find numerous implementations of the algorithm in the internet. If you need it for a student project, please read and understand an algorithm, and implement it yourself. If wikipedia is unclear, please read other books. Wikipedia is not the ultimate source of absolute wisdom, it is a tool to find information. - Altenmann >t 22:51, 27 October 2009 (UTC)
- I put the code back for two reasons:
- 1) You obviously don't know why it's "incorrect", or you would have fixed it (though you are omniscient enough to know who I am and why I need the algorithm. Odd...).
- 2) because I still have hopes that someone who does know what's wrong (which may be me, no thanks to you) will have something to fix, thus making Wikipedia better, rather than using it as his/her personal trolling grounds.