I went through chan's algorithm. It doesn't seem much better to me. Is there a way I can replace that sorting part in graham scan with anything else ? so that O(nlogn) time could be further reduced. Java implementation is preferred.
Is there a way to further optimize Graham Scan algorithm to find the convex hull?
1.3k Views Asked by rishu At
1
There are 1 best solutions below
Related Questions in JAVA
- Add image to JCheckBoxMenuItem
- How to access invisible Unordered List element with Selenium WebDriver using Java
- Inheritance in Java, apparent type vs actual type
- Java catch the ball Game
- Access objects variable & method by name
- GridBagLayout is displaying JTextField and JTextArea as short, vertical lines
- Perform a task each interval
- Compound classes stored in an array are not accessible in selenium java
- How to avoid concurrent access to a resource?
- Why does processing goes slower on implementing try catch block in java?
- Redirect inside java interceptor
- Push toolbar content below statusbar
- Animation in Java on top of JPanel
- JPA - How to query with a LIKE operator in combination with an AttributeConverter
- Java Assign a Value to an array cell
Related Questions in ALGORITHM
- Two different numbers in an array which their sum equals to a given value
- Given two arrays of positive numbers, re-arrange them to form a resulting array, resulting array contains the elements in the same given sequence
- Time complexity of the algorithm?
- Find a MST in O(V+E) Time in a Graph
- Why k and l for LSH used for approximate nearest neighbours?
- How to count the number of ways of choosing of k equal substrings from a List L(the list of All Substrings)
- Issues with reversing the linkedlist
- Finding first non-repeating number in integer array
- Finding average of an array
- How to check for duplicates with less time in a list over 9000 elements by python
- How to pick a number based on probability?
- Insertion Sort help in javascript -- Khan Academy
- Developing a Checkers (Draughts) engine, how to begin?
- Can Bellman-Ford algorithm be used to find shorthest path on a graph with only positive edges?
- What is the function for the KMP Failure Algorithm?
Related Questions in SORTING
- How to sort a multi-dimensional array by the second array in descending order?
- Ignore #VALUE! error in SORT function
- What is the code of the sorted function?
- Pull out first occurrences from array
- how to keep 10 biggest integer while reading a list in java?
- IQueryable<T> OrderBy<T> Extension Fails with Foreign Key Property
- Anagram test using C++ having compile time error
- How to sort a nested dictionary by the a nested value?
- sort through text file numerically by numbers in column
- Python elegant way to sort numerically named directories
- sorting all data on multiple pages by clicking on its header
- Sort oberservableArray by multiple parameters
- 2D array, sort rows by sum
- sorting RDD elements
- Less beautifier - format code
Related Questions in CONVEX-HULL
- Time complexity of Andrew's algorithm (complex hull)
- isInside not working for btConvexHullShape of Bullet Physics library
- SPOJ - #26 BSHEEP - Build the Fence
- Picture Convex hull in 3D Scatter Plot
- get convexhull points from array in openframeworks opencv
- How to apply convex hull optimization in dynamic programming?
- Generate convex hull from points
- Merging two tangled convex hulls
- Finding a "complete" convex hull in less than O(n^2)
- what do I get from scipy.spatial.Delaunay.convex_hull
- QuickHull worst case
- Create a home range by CharHull() and with an area less than 100% of the total home range area
- Convex Hull calculation in Point Cloud Library fails in 2 as well as 3 dimensions
- Extracting the fingers from the hand
- ST_ConvexHull(ST_Collect(pointgeom)) returns points, linestrings and polygons
Related Questions in GRAHAMS-SCAN
- Merging two tangled convex hulls
- Graham Scan Algorithm -> sqrt and arctan2 huge values
- Why stack in convex hull
- text file with x y coordinates to empty Point2D[] array in Java
- Jarvis algorithm (gift-wrapping) or graham-scan - C#
- Implementing Graham Scan in C#
- Can you pattern match integers to ranges in OCaml?
- Graham scan when the points are already sorted by one of the coordinates
- Graham Scan Convex Hull appending too many vertices
- C++ Convex hull using Graham scan algorithm
- Erroneous points produced on convex hull despite following Graham scan
- Input for Jarvis algorithm so that is faster than Graham's (convex hull)
- Convex Hull Not Returning Right Path ( Graham Scan in C++)
- How to generate worst case data for Graham Scan
- How to sort floating point coordinates with no elimination of coordinates?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
The best way to optimise the sorting step is to avoid considering points which will not be part of the convex hull. This is called Akl-Toussaint heuristic http://www-cgrl.cs.mcgill.ca/~godfried/publications/fast.convex.hull.algorithm.pdf. You can quickly scan through all vertices and find a quadrilateral formed the pointset (you can get the four points as the extrema of for all vertices in ±(x+y), ±(x-y)), then just delete all the vertices inside this quadrilateral.
After this you can use Graham's scan or Andrew's monotone chain algorithm —my favourite, both are of O(n log n)complexity. Note that, like @Chill mentioned in comments above, Chan's method is optimal.
In practice this method is much faster than applying one of the algorithms to the point set without any filtering.
The paper I linked above mentions a "throw-away" idea in the conclusions section. This is a slight improvement, since we can throw away most of the vertices while searching for the quadrilateral itself. I am attaching a snippet just for this heuristic.