I'm curious if anyone could explain a branchless binary search implementation to me. I saw it mentioned in a recent question but I can't imagine how it would be implemented. I assume it could be useful to avoid branches if the number of items is quite large.
2
There are 2 best solutions below
4
supercat
On
If one has a function which returns +1, -1, or 0 based upon the position of the correct item versus the current one, one could initialize position to list size/2, and stepsize to position/2, and then after each comparison do position+=direction*stepsize; stepsize=stepsize/2. Iterate until stepsize is zero.
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 BINARY-SEARCH
- Binary Search Error while trying to search through list
- Getting wrong answer in Binary Search solution
- Typescript error: "./src/models/MenuModel").SortOrder' is not assignable to parameter of type 'number'.ts(2345) (property) MenuModel.order: SortOrder
- What is the time complexity of doing two binary searches on an array?
- Allocate books DSA problem - Why is storing answer necessary when books allocated to less students?
- Why won't my binary search work for numbers that are double digits?
- Binary Search Tree (BST) - array representations
- Binary search for closest number in array to target, according to K. (C language)
- Leetcode 875: Koko Eating Bananas
- RunTime error in one testcase in Kth element of two sorted arrays
- Why isn't the code reflecting the actual mathematical behaviour when doing a binary search guess?
- Why incorrect answer for the Painter's partition problem when input is very large?
- Find the number of Kth-descendants of vertex v in tree
- Continuous Binary Search over Metric Space
- Amortised complexity of an operation on std::map data-structure
Related Questions in BRANCHLESS
- Branchless calculation for multiplying by the complement of a fraction with a flag
- How to avoid branching when finding runs of the same value and storing as a range (like run-length encoding)?
- How can I perform a branchless conditional arithmetic operation in C?
- Branchless way to set all bits if no bits are set?
- In assembly, should branchless code use complementary CMOVs?
- RISCV branchless coding
- Why are the branchless and built-in functions slower in Python?
- Branchless comparison in x86_64
- Is there a branchless way to move number towards another number without exceeding it?
- RISC-V Implement a discrete function without branching
- Set 8th bit if all lower 7 bits are set without branching
- How to do a branchless discard?
- How can I make this branchless? (Avoiding log(0))
- Is it possible to perform 128-bit / 64-bit division without branching, in terms of 64-bit division?
- Transform random integers into range [min,max] without branching
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 # Hahtags
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?
I'm going to assume you're talking about the sentence "Make a
static constarray of all the perfect squares in the domain you want to support, and perform a fast branchless binary search on it." found in this answer.A "branchless" binary search is basically just an unrolled binary search loop. This only works if you know in advance the number of items in the array you're searching (as you would if it's
static const). You can write a program to write the unrolled code if it's too long to do by hand.Then, you must benchmark your solution to see whether it really is faster than a loop. If your branchless code is too big, it won't fit inside the CPU's fast instruction cache and will take longer to run than the equivalent loop.