如何在java中表示位向量,以便在O(logn)中搜索

如何在java中表示位向量,以便在O(logn)中搜索,java,algorithm,sorting,search,Java,Algorithm,Sorting,Search,我有一个元素列表,我需要为每个元素创建一个由位组成的签名。我将以位向量列表结束。之后,我需要对位向量列表进行词汇排序。之后,我需要在排序向量列表中搜索位向量 我发现,如果我将签名表示为一个字符串,排序将采用O(N),使用二进制搜索进行搜索将采用O(M logN),其中M是字符串签名的长度 但我发现,对于一般的数字,排序需要O(n LogN),使用二进制搜索进行搜索需要O(LogN) 我的问题是如何在java中表示位向量,这样我就可以按字典顺序进行排序,并获得与处理一般数字相同的性能 我最关心的是

我有一个元素列表,我需要为每个元素创建一个由位组成的签名。我将以位向量列表结束。之后,我需要对位向量列表进行词汇排序。之后,我需要在排序向量列表中搜索位向量

我发现,如果我将签名表示为一个字符串,排序将采用O(N),使用二进制搜索进行搜索将采用O(M logN),其中M是字符串签名的长度

但我发现,对于一般的数字,排序需要O(n LogN),使用二进制搜索进行搜索需要O(LogN)

我的问题是如何在java中表示位向量,这样我就可以按字典顺序进行排序,并获得与处理一般数字相同的性能


我最关心的是使用二进制搜索实现O(logN)搜索时间,正如有人在一篇论文中声称的那样,但没有提供任何线索。

扩展@Keith的建议,使用
java.util.BitSet
,但扩展它以实现
可比的
。实施适合您的领域的词汇比较。也许调整
hashCode()
equals()
以提高速度

此时,您可以轻松地对位集集合进行排序,并使用二进制搜索


或者,像往常一样,您可以编写一个
比较器
来进行词汇比较。

排序永远不会只需要
O(logn)
。那句话的复杂程度被颠倒了吗?@HunterMcMillen那是一句毫无保留的话。如果我们在初始列表中引入约束条件,甚至可能需要O(1)。@HunterMcMillen我修正了它,我知道您希望我对我的声明更具体一些,但似乎很明显,手头的问题涉及未排序的元素。@MarkoTopolnik我理解您的意图,我只是好奇到底存在什么约束,因为我从来没有遇到过约束。