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 answers
Related Questions in JAVA
- I need the BIRT.war that is compatible with Java 17 and Tomcat 10
- Creating global Class holder
- No method found for class java.lang.String in Kafka
- Issue edit a jtable with a pictures
- getting error when trying to launch kotlin jar file that use supabase "java.lang.NoClassDefFoundError"
- Does the && (logical AND) operator have a higher precedence than || (logical OR) operator in Java?
- Mixed color rendering in a JTable
- HTTPS configuration in Spring Boot, server returning timeout
- How to use Layout to create textfields which dont increase in size?
- Function for making the code wait in javafx
- How to create beans of the same class for multiple template parameters in Spring
- How could you print a specific String from an array with the values of an array from a double array on the same line, using iteration to print all?
- org.telegram.telegrambots.meta.exceptions.TelegramApiException: Bot token and username can't be empty
- Accessing Secret Variables in Classic Pipelines through Java app in Azure DevOps
- Postgres && statement Error in Mybatis Mapper?
Related Questions in ALGORITHM
- MCNP 6 - Doubts about cells
- Given partially sorted array of type x<y => first apperance of x comes before first of y, sort in average O(n)
- What is the algorithm behind math.gcd and why it is faster Euclidean algorithm?
- Purpose of last 2 while loops in the merge algorithm of merge sort sorting technique
- Dots and Boxes with apha-beta pruning
- What is the average and worst-case time complexity of my string searching algorithm?
- Building a School Schedule Generator
- TC problem 5-2:how to calculate the probability of the indicator random variable?
- LCA of a binary tree implemented in Python
- Identify the checksum algorithm
- Algorithm for finding a subset of nodes in a weighted connected graph such that the distance between any pair nodes are under a postive number?
- Creating an efficent and time-saving algorithm to find difference between greater than and lesser than combination
- Algorithm to find neighbours of point by distance with no repeats
- Asking code suggestions about data structure and algorithm
- Heap sort with multithreading
Related Questions in SORTING
- Sorting a List by its property renames all the objects in the List
- Does Sort() method in C# use recursion?
- ARM Assembly code is not executing in Vitis IDE
- Creating an efficent and time-saving algorithm to find difference between greater than and lesser than combination
- Heap sort with multithreading
- Laravel Livewire data table sorting livewire update payload
- basic MergeSort exercise
- How to import a range into a variant array in Excel VBA and sort using the sort method?
- Looker Studio | pivot chart - sorting by metric and last month
- how to create an array of multiples of 5 and display it in reverse
- matplotlib sort barh by values
- Custom Sorting Javascript with A-Z set
- Mainframe Programming Sorting, OUTFIL REMOVECC,NODETAIL
- Soft list based on another list
- SQL query : creating table with distinct values on selected columns
Related Questions in CONVEX-HULL
- convex hull method yielding multiple polygons
- How much exact are the operations in CGAL function "halfspace intersection with constructions"
- Drawing the outermost contour of a set of data points without losing resolution
- Implementing Jarvis Binary Search in Chan's algorithm
- How to add convex hulls to beta diversity graphs using phyloseq
- Visualizing 3D Convex Hulls for Grouped Data in R with Plotly
- Finding rectangle vertices from a parametrized plane
- How to chose colors of several convex hulls in a 3D environment and to display them in the legend?
- Vectorize a Convex Hull and Interpolation loop on a specific axis of an ndarray
- Performance improvements for rotating caliper to find the minimum bounding box in 2D
- Is the Convex hull of a simple polygon, and the convex hull of the vertices on a Euclidian plane (that make up the simple polygon), the same set?
- Algorithm for uniting a list of non-overlapping rectangles
- How can i turn a set of points and a seperating line into a linear program solvable in python? (Marriage before conquest algorithm)
- Why doesn't opencv's convexHull work on a subset of my contour, while it does work on the whole thing?
- How to find center point of 3d convexl hull, 3d polygon or polyhedron (all by Delaunay triangulation) in R
Related Questions in GRAHAMS-SCAN
- Graham scan when the points are already sorted by one of the coordinates
- text file with x y coordinates to empty Point2D[] array in Java
- Can you pattern match integers to ranges in OCaml?
- Convex Hull Not Returning Right Path ( Graham Scan in C++)
- How to generate worst case data for Graham Scan
- Struct comparator accessing another field in c++
- Haskell length and filter to determine convexity or concavity of a line
- Sorting by Polar Angle
- Jarvis algorithm (gift-wrapping) or graham-scan - C#
- Graham Scan Convex Hull appending too many vertices
- Checking for a nonleft turn in Graham's scan
- Convex Hull Algorithm - Graham scan fastest compare function?
- Draw a convex hull on a google map
- Calculate contour by using Gaham Scan
- Is there a way to further optimize Graham Scan algorithm to find the convex hull?
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?
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)
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.