Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func findNextSet(a uint32) uint32{
- b := (a + 1) & a
- c := bits.OnesCount32((b - 1) ^ a) - 2
- a = (((((a + 1)^ a) << 1) + 1) << c) ^ b
- return a
- }
- func (bv *BooleanVector) Cor(pua []int32) int{
- if pua[0] != 0 {
- return 0
- }
- ans := bv.nVariable
- for m := bv.nVariable; m > 0 ; m-- {
- set := uint32((1 << m) - 1) << (bv.nVariable - m)
- for set < (1 << bv.nVariable) {
- if bits.OnesCount32(set) <= m && pua[set] != 0{
- ans = m - 1
- break
- }
- set = findNextSet(set)
- }
- }
- return ans
- }
- func TestBooleanVector_Cor(t *testing.T) {
- tests := []struct {
- vector string
- cor int
- }{
- {"10010110", 2},
- {"01100000", 0 },
- {"01100110", 1},
- {"00011111011110011011101011011100", 0},
- {"10000111011000111110100001011001", 1},
- }
- for _, tt := range tests{
- t.Run("", func(t *testing.T) {
- tt := tt
- bv := BooleanVector{}
- err := bv.BoolVectorFromString(tt.vector)
- require.NoError(t, err)
- bv.PrintVector()
- f := bv.PUA()
- fmt.Println(fmt.Sprintf("%d ", f))
- ans := bv.Cor(f)
- fmt.Printf("Cor: %d \n", ans)
- assert.Equal(t, ans, tt.cor)
- })
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement