모든 멤버간에 이진 1 비트 변경 생성

루니

질문이 있습니다. 이진 목록을 생성하고 싶지만 목록의 구성원 간에는 한 비트 만 변경됩니다.

oneBitAll :: 적분 a => a-> [[문자열]]

n = 2 인 경우

산출:

[ "00", "01", "11", "10"] ve [ "00", "10", "11", "01"]

n = 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"], [ "000", "001", "101", "111", "011", "010", "110", "100"], [ "000", "010", "011 ","001 ","101 ","111 ","110 ","100 "], .....]

멤버간에 단 한 비트 만 변경됩니다.

도와주세요.

이것은 하나만 준다

g 0 = [""]
g n = (map ('0':)) (g (n-1)) ++ (map ('1':)) (reverse (g (n-1)))

회색 코드는 사실이지만 모든 조합을 찾고 싶습니다.

주어진 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 명의 구성원을 생성해야합니다.

다니엘 와그너

그레이 코드 구조를 더 많이 이용하는 더 현명한 방법이있을 것입니다. 이 방법은 빠르고 더럽지 만 꽤 잘 작동하는 것 같습니다.

기본 아이디어는 모든 비트 문자열 시퀀스를 생성 한 다음 회색 코드가 아닌 것을 필터링하는 것입니다. 그러나 우리는 각 시퀀스의 접두사를 확인하여 그레이 코드로 확장 할 수 있는지 확인하고 불가능한 접두사를 제거한다는 점에서 약간 더 영리 할 것입니다.

우리의 목적을 위해 회색 코드에는 5 가지 속성이 있습니다.

  • 연속적인 비트 스트링의 각 쌍은 정확히 한 곳에서 다릅니다.
  • 시퀀스는 순환 적입니다. 첫 번째 및 마지막 비트 문자열도 정확히 한 위치에서 다릅니다.
  • 시퀀스의 두 비트 문자열이 같지 않습니다.
  • 비트 문자열 길이가 n 인 코드에는 2 ^ n 개의 요소가 있습니다.
  • 순환 대칭을 깨기 위해 모든 코드는 모두 0 인 비트 문자열로 시작합니다.

이러한 속성 중 세 가지를 코드 접두사로 표현할 수 있습니다.

import Control.Monad
import Data.List

validCodePrefix xss = nearbyPairs && unique && endsWithZeros where
    nearbyPairs = all (uncurry nearby) (zip xss (tail xss))
    unique = all ((1==) . length) . group . sort $ xss
    endsWithZeros = all (all (=='0')) (take 1 (reverse xss))

nearby xs xs' = length [() | (x, x') <- zip xs xs', x /= x'] == 1

순환 조건은 완료된 코드에만 적용되며 다음과 같이 작성할 수 있습니다.

cyclic xss = nearby (head xss) (last xss)

모든 적절한 길이의 비트 문자열에서 반복적으로 선택하고 유효한 비트 문자열 만 유지하여 검색을 구현하고 길이 조건을 동시에 적용 할 수 있습니다.

codes n = go (2^n) [] where
    go 0 code = [reverse code | cyclic code]
    go i code = do
        continuation <- replicateM n "01"
        guard (validCodePrefix (continuation:code))
        go (i-1) (continuation:code)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

더 많은 이미지를 가진 jquery 1 id 및 모든 이미지 너비 / 높이 / 위치 변경

분류에서Dev

"새"생성 된 인스턴스의 모든 멤버 변수가 스택이 아닌 힙에 존재합니까?

분류에서Dev

변경 메모 1. Delphi에서 동적으로 생성 된 모든 양식의 글꼴

분류에서Dev

모든 레이블에서 1 개의 문자 생성

분류에서Dev

이진 트리에서 모든 경로 찾기

분류에서Dev

모든 데이터 세트에 대한 하이 차트 생성

분류에서Dev

비트 필드 멤버의 모든 비트를 1로 설정하는 방법

분류에서Dev

C의 이진 주소에서 주어진 비트 변경

분류에서Dev

mysqli 업데이트는 mysqli_stmt_affected_rows에서 1을 반환하지만 DB의 모든 변경 사항

분류에서Dev

64 비트 컴퓨터는 메모리에서 1 바이트를 어떻게 변경합니까?

분류에서Dev

데이터 프레임의 이진 및 문자 변수에서 2- 모드 네트워크 생성

분류에서Dev

최신 버전 Umbraco 7로 업데이트 한 후 생성 된 모델 속성 유형 변경

분류에서Dev

JAXB에 모든 객체 생성 이벤트 등록

분류에서Dev

주어진 문장에서 특정 기호의 모든 발생 색상 변경

분류에서Dev

Subversion 커밋 이전에 모든 변경 사항에 대한 통합 보고서 생성

분류에서Dev

Modern 7.0 ComboBox는 모든 값 변경에 대해 '선택'이벤트를 발생시킵니다.

분류에서Dev

아카이브의 모든 시트에서 셀 공식 변경

분류에서Dev

텍스트 변경 이벤트에서 버튼 활성화 및 비활성화

분류에서Dev

버튼이 비활성화 된 경우 텍스트 변경 (부트 스트랩)

분류에서Dev

비활성화 된 경우에도 중첩 된 변경 이벤트가 계속 발생합니다.

분류에서Dev

객체의 모든 변수가 거짓 인 경우 AngularJs 비활성화 버튼

분류에서Dev

Java에서 모두 1로 구성된 가변 길이의 이진수를 생성하는 가장 쉬운 방법은 무엇입니까?

분류에서Dev

항목이없는 경우 모든 시간 세그먼트에 대해 행을 생성하는 방법에 대한 질문

분류에서Dev

포인터와 비트 연산자를 사용하여 메모리에서 1 비트를 변경하는 C 함수를 작성합니까?

분류에서Dev

주어진 브랜치의 모든 커밋에서 변수 이름 변경

분류에서Dev

Ansible 플레이 북의 해시 변수에있는 모든 멤버의 테스트 값

분류에서Dev

정적 사이트 생성기에 의한 변경 기반 재생성

분류에서Dev

xgboost.dump에서 이진 트리의 모든 경로를 찾습니다.

분류에서Dev

모든 이진 (0, 1, NA) 변수를 요인으로 변환

Related 관련 기사

  1. 1

    더 많은 이미지를 가진 jquery 1 id 및 모든 이미지 너비 / 높이 / 위치 변경

  2. 2

    "새"생성 된 인스턴스의 모든 멤버 변수가 스택이 아닌 힙에 존재합니까?

  3. 3

    변경 메모 1. Delphi에서 동적으로 생성 된 모든 양식의 글꼴

  4. 4

    모든 레이블에서 1 개의 문자 생성

  5. 5

    이진 트리에서 모든 경로 찾기

  6. 6

    모든 데이터 세트에 대한 하이 차트 생성

  7. 7

    비트 필드 멤버의 모든 비트를 1로 설정하는 방법

  8. 8

    C의 이진 주소에서 주어진 비트 변경

  9. 9

    mysqli 업데이트는 mysqli_stmt_affected_rows에서 1을 반환하지만 DB의 모든 변경 사항

  10. 10

    64 비트 컴퓨터는 메모리에서 1 바이트를 어떻게 변경합니까?

  11. 11

    데이터 프레임의 이진 및 문자 변수에서 2- 모드 네트워크 생성

  12. 12

    최신 버전 Umbraco 7로 업데이트 한 후 생성 된 모델 속성 유형 변경

  13. 13

    JAXB에 모든 객체 생성 이벤트 등록

  14. 14

    주어진 문장에서 특정 기호의 모든 발생 색상 변경

  15. 15

    Subversion 커밋 이전에 모든 변경 사항에 대한 통합 보고서 생성

  16. 16

    Modern 7.0 ComboBox는 모든 값 변경에 대해 '선택'이벤트를 발생시킵니다.

  17. 17

    아카이브의 모든 시트에서 셀 공식 변경

  18. 18

    텍스트 변경 이벤트에서 버튼 활성화 및 비활성화

  19. 19

    버튼이 비활성화 된 경우 텍스트 변경 (부트 스트랩)

  20. 20

    비활성화 된 경우에도 중첩 된 변경 이벤트가 계속 발생합니다.

  21. 21

    객체의 모든 변수가 거짓 인 경우 AngularJs 비활성화 버튼

  22. 22

    Java에서 모두 1로 구성된 가변 길이의 이진수를 생성하는 가장 쉬운 방법은 무엇입니까?

  23. 23

    항목이없는 경우 모든 시간 세그먼트에 대해 행을 생성하는 방법에 대한 질문

  24. 24

    포인터와 비트 연산자를 사용하여 메모리에서 1 비트를 변경하는 C 함수를 작성합니까?

  25. 25

    주어진 브랜치의 모든 커밋에서 변수 이름 변경

  26. 26

    Ansible 플레이 북의 해시 변수에있는 모든 멤버의 테스트 값

  27. 27

    정적 사이트 생성기에 의한 변경 기반 재생성

  28. 28

    xgboost.dump에서 이진 트리의 모든 경로를 찾습니다.

  29. 29

    모든 이진 (0, 1, NA) 변수를 요인으로 변환

뜨겁다태그

보관