找到多个BitSets java的公共父级

时间:2016-05-25 04:52:38

标签: java algorithm bitset

我无法在Bitset方法中找到这个简单问题的正确解决方案。问题是从最左边的位开始找到位集的公共父节点。以下是一些例子:

011
010
001
Common Parent: 0

00 
010
Common Parent: 0

00
11
10
Common Parent: None

1101
111
1100
Common Parent: 11

我的解决方案是和位集,然后通过查找这些位集的XOR上的第一个设置位来找到正确的长度。它适用于某些情况,但其他情况则失败。我有另一个想法,涉及循环使用Bitsets,如果你有解决方案,我将非常乐意避免。

[我知道它们可以表示为二叉树,但这涉及一个内存开销,我希望通过仅操作位集和一些布尔操作(AND,OR,NOR,NAND,XOR)来避免这种情况。

3 个答案:

答案 0 :(得分:0)

你可以这样做:

obj-m := $(MODNAME).o
ccflags-y := $(CCFLAGS)
src_files := $(wildcard $(foreach pat,*.c *.cpp *.s,src/$(pat) src/$(MODNAME)/$(pat)))
$(MODNAME)-objs := $(addsuffix .o, $(basename $(src_files)))

all:

    make -C $(KDIR) M=$(shell pwd) modules

clean:

    make -C $(KDIR) M=$(shell pwd) clean

我在代码中写了几条评论。我希望它有所帮助!

答案 1 :(得分:0)

您可以ANDOR所有位集并存储在两个变量中。从MSBLSB同时迭代这两个变量。如果OR[i]0,则所有位集在i th 位置都有0。如果AND[i]1,则所有位集在该位置都有1,否则它们会混合。

答案 2 :(得分:0)

我建议倒转数字并从右边找到父母,然后将父母翻转以找到真实的东西。

我认为你遇到的最棘手的情况是

1101
111
1100
Common Parent: 11

并且倒车会让你离开它。