ı есть вопрос. ı хочу генерировать двоичный список. но между членами списка будет только одно изменение бита.генерировать двоичное одно битное изменение между всеми членами
oneBitAll :: Интеграл а => а -> [[String]]
при п = 2
Выход:
[ "00", "01", "11", "10"] в [ "00", "10", "11", "01"]
п = 3
oneBitAll 3
[[ "000", "001", "011" , «010», «110», «111», «101», «100»], [«000», «001», «011», «111», «101», 100 "," 110 "," 010 "], [000, 001, 101, 100, 110, 111, 011, 010, «100», «010», «011», «001», «101», «100», «010», , "111", "110", "100"], .....]
только одно изменение между членами.
помогите пожалуйста.
это дает только один
g 0 = [""]
g n = (map ('0':)) (g (n-1)) ++ (map ('1':)) (reverse (g (n-1)))
серый код верно для this.but Я хочу, чтобы найти все комбинации.
Как я могу генерировать все возможные серые коды для заданного числа n?
permute [] = [[]]
permute xs = concatMap (\x -> map (x:) $ permute $ delete x xs) xs
g 0 = [""]
g n = (map ('0':)) (g (n-1)) ++ (map ('1':)) (reverse (g (n-1)))
oneBitAll n = (map transpose . permute . transpose $ g n)
Этот код генерирует половину возможностей. Что не может добавить этот код?
[["000", "001", "011", "010", "110", "111", "101", "100"], ["000", "010", "011 " "001", "101", "111", "110", "100"], [ "000", "001", "101", "100", "110", "111"," 011 », "010"], [ "000", "010", "110", "100", "101", "111", "011", "001"], [ "000", "100", "101", "001", "011", "111", "110", "010"], [ "000", "100", "110", "010", "011", "111", "101", "001"]]
, но необходимо сгенерировать 12 участников.
трудная проблема? Как это сделать? – rooney
google "Grey code" – ErikR
спасибо, но это даст все возможное? – rooney