Сортировка ковшей с разными размерами ковшей - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь разделить все числа между 0..2 ^ 12 на 4 сегмента в соответствии с изменяющимися диапазонами.

Например, у меня есть [0, 1000, 2100, 4000, 4096], поэтому яесть 4 сегмента: [0-1000], [1000-2100], [2100-4000], [4000-4096].

Как я могу построить функцию, которая помещает каждое число в правильный номер - безif, переключение дел и т. д.

Мне нужно что-то очень эффективное, поэтому я ищу побитовую операцию или сложение \ вычитание, а затем побитовую операцию.

1 Ответ

0 голосов
/ 05 декабря 2018

Ввод в форме [0, a, b, c, 4096].Если вы не возражаете против предварительного расчета, вы можете перейти к предложенному массиву.В противном случае вы могли бы сделать что-то подобное со следующими допущениями:

3 - ((n - a) >> 31) - ((n - b) >> 31) - ((n - c) >> 31)

Идея состоит в том, что если число становится отрицательным, будет установлен старший бит, и, сдвинув его на 31 позицию, вы получите 1.

Вы также можете просто добавить 3 вычитаемых выражения, чтобы получить 4 сегмента, но затем0-е ведро содержит самые большие числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...