У меня есть небольшие векторы. Каждый из них состоит из 10 целых чисел, которые находятся между 0 и 15. Это означает, что каждый элемент в векторе может быть записан с использованием 4 бит. Поэтому я могу конкатенировать элементы вектора и хранить весь вектор в одном long
(в C, C++, java ...)Эффективное сравнение малых целых векторов
Вектор v1 доминирует над вектором v2, если для каждого i в 0, ..., 9, v1 [i]> = v2 [i]
Я хочу написать метод compare(long v1, long v2)
, который будет возвращать 0, если не векторы доминируют над другим, 1, если первый доминирует, а -1, если второй доминирует.
Есть ли эффективный способ реализовать сравнение, отличное от того, чтобы получить каждый компонент i и выполнить в 10 раз обычное целочисленное сравнение?
EDIT
если v1 точно так же, как и v2 возвращение 1 или -1 оба прекрасно
Если вы можете предположить x86 только тогда SSE, вероятно, путь - хранить векторы, как 16 х 8 битных Интс, а затем это довольно просто осуществить сравнение. –
Вы уверены, что правильно определили вашу проблему? Что должно «сравнивать (v, v)» return? Я предполагаю, что вы хотите 0 для этого, т. Е. V1 доминирует только в v2, если хотя бы один элемент больше? – duncan