【发布时间】:2015-08-30 15:11:55
【问题描述】:
我有小向量。它们中的每一个都由 0 到 15 之间的 10 个整数组成。这意味着向量中的每个元素都可以用 4 位写入。因此,我可以连接我的向量元素并将整个向量存储在单个 long 类型中(在 C、C++、java 中......)
如果对于 0,...,9, v1[i] >= v2[i] 中的每个 i,向量 v1 支配向量 v2
我想编写一个方法compare(long v1, long v2),如果没有一个向量占主导地位,则返回 0,如果第一个占主导地位,则返回 1,如果第二个占主导地位,则返回 -1。
除了获取每个 i 分量并进行 10 倍的普通整数比较之外,还有什么有效的方法来实现比较?
编辑
如果 v1 与 v2 完全相同,返回 1 或 -1 都可以
【问题讨论】:
-
如果您可以假设 x86-only 那么 SSE 可能是要走的路 - 将您的向量存储为 16 x 8 位整数,然后实现比较非常简单。
-
您确定您的问题定义正确吗?
compare(v, v)应该返回什么?我假设您为此需要 0,即如果至少一个元素更大,v1 仅在 v2 中占主导地位?
标签: c integer compare bit-manipulation string-comparison