| Ilya Zakharevich on Mon, 08 Jul 2024 22:31:37 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| vecsort() shortcomings |
At least the docs are not clear in the “lexicographical” case:
“Inverting” the lexicographic order is tricky.
I would
• make the “0x4” bit-of-flag reverse the order of the RESULTING vector;
• make negative entries in the “cmpf” array mean “reverse the
result of “comparison w.r.t. this coordinate”;
• Make a 0-entry in this array mean “remove the duplicates up to
this point” — in the sense of keeping only the first entry with
given components up to this point.
(Maybe with the entry like -0.001 meaning “keep only the last entry
with ‘this prefix’” — instead of the “first entry with this
prefix”. Or maybe a doubled 0 entry can do this better? Or use
strings "1" and "-1"?)
(Currently, I write:
neg = vecsort(vecsort(neg,2,4),1,8); \\ sort lexicographically in order [“1”,-“2”] and keep the first entry
pos = vecsort(vecsort(pos,2), 1,8); \\ sort lexicographically in order [“1”, “2”] and keep the first entry
This would become
neg = vecsort(neg, [1, "1", -2]); \\ or [1, "-1", 2]
pos = vecsort(pos, [1, "1", 2]);
)
Another warning: I noticed that in a lot of CS documentation, when
they mention “bit 4” (or “binary digit 4”) they actually mean 0b10000
(or maybe 0b1000 ?!). In my docs, to avoid this ambiguity I decided
to use 0x04 in such cases.
Hope this helps,
Ilya