Problem 955. ismember: Enhanced Time Performance for 'rows' - Speed Scoring (90% savings)
The Challenge is to perform very fast the 'ismember' function for a long and wide array.
The data is small integer representing data permutations of items like DNA and Rubik's cube faces and orientations.
Input: Array of uint8 of dimensions (m, 16) with values 0:3
Output: Array Equivalent to ismember(A,B,'rows')
Hints:
1) Columns can be merged to form a reduced number of columns 2) Unique has the option to provide an Array and a sorting Index
Solution Stats
Problem Comments
-
6 Comments
I try but I don't understand the merge function (Alfonso and Richard solutions). Can you explain ?
since numbers only range from 0 to 3 you may consider each row of A or B as a 16-digit base-4 number and just convert it to a 32-bit integer...
Ok. Thanks.
But if we have less restrictions on the input range (for example values between 0 and 255) ?
Jean-Marie, the methodology of converting multiple column value words into a single value has limited but specific applications where value ranges are limited. In the case of DNA sequencing the values can be made numeric 0:3. For ranges up to 255 the width gets limited to stay under the 2^64, or 2^53 limit for double. This challenge was a demonstration of a method to improve performance for functions like ismember.
Thank you.
Solution Comments
Show commentsProblem Recent Solvers16
Suggested Problems
-
Remove all the words that end with "ain"
2275 Solvers
-
9976 Solvers
-
Get the length of a given vector
10805 Solvers
-
Compute a dot product of two vectors x and y
986 Solvers
-
String substitution, sub problem to cryptoMath
230 Solvers
More from this Author308
Problem Tags
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!