문제

부울 논리에서 어떻게 x를 표현할 수 있습니까? 다음 중 2 가지와 같은 규칙은 사실이어야합니다 (A, B, C, D, E, F) 곱셈 또는 설정 작업의 형태입니까?
최종 결과는 AB 또는 AC 또는 AD와 같은 모든 순열입니다. 다음 중 3 개를 ABC, ABD, ABE 등과 같습니다. (A, B, C)^2?

감사해요!

도움이 되었습니까?

해결책

부울 논리에서 (V 또는 ' 술어를 따르는 것은 아닙니다) :

A B C'D'E'F' v
A B'C'D'E'F  v
A'B C'D'E'F' v
: : : : : :
<absolute bucketload of boolean expressions>
: : : : : :
A'B'C'D'E F

순열을 사용하면 작성해야 할 많은 하위 표현이 있습니다.

물론, 이것이 프로그래밍 질문 인 경우 부울을 0 또는 1으로 변환하고 모두 추가하고 결과가 2임을 확인할 수 있습니다.

다른 팁

c# 또는 다른 언어를 가정하면 bool! = int :

bool nOf(int n, bool[] bs)
{
    foreach(bool b in bs)
    {
      if((n -= b ? 1 : 0) <= 0) break;
    }
    return n == 0;
}

파이썬 :

expressions = [A, B, C, D, E, F, G ]
numTrue = len(filter(None, expressions)

PHP :

$expressions = array(A, B, C, D, E, F, G);
$numTrue = count(array_filter($expressions));

당신은 거기에 아이디어가 있습니다. "k of n holds"를 표현하려면 k가 보유하는 모든 사례를 열거해야합니다. 따라서 변수가 ABCDE가 있고 5/5를 원한다면 필요합니다.

(A  &  B &  C & ~D & ~E) |
(A  &  B & ~C &  D & ~E) |
(A  &  B & ~C & ~D &  E) | ...
(~A & ~B &  C &  D &  E)

여기서 & is "및", | "또는"및 ~는 "아니야"입니다.

"a 이상"을 가정합니다.

당신은 나무를 만들어 조금 더 잘할 수 있습니다

2 : a&(b|c|d|e|f) | b&(c|d|e|f) | c&(d|e|f) | d&(e|f) | e*f
3 : a&(b&(c|d|e|f) | c&(d|e|f) | d&(e|f) | e*f) | b&(c&(d|e|f) | d&(e|f) | e*f) | c&(d&(e|f) | e*f) | d&e&f

또는 코드로

bool AofB(int n, bool[] bs)
{
   if(bs.length == 0) return false;
   if(n == 0) return true;

   foreach(int i, bool b; b[0..$-n])
      if(b && AofB(n-1,b[i+1..$]) return true;

   return false;
}

더 나은

bool AofB(int n, bool[] bs)
{
   foreach(bool b; bs) if(b && --n == 0) return true;
   return false;
}

나는 그들을 세고 할 것이다. 그러나 부울 작업을 사용하여 술어를 생성 해야하는 경우 입력을 부가자 시스템으로 비트로 취급 할 수 있습니다.

Basic Half-Adder

A, B : 1st 2nd bits
O, C : unit output and carry to next unit

O := A xor B;
C := A and B;

wikipedia]에서 더 많은 예제와 링크를 찾을 수 있습니다.http://en.wikipedia.org/wiki/half_adder (반 집단)

그런 다음 6 개의 변수를 3 쌍으로 그룹화 한 다음 해당 출력을 사용하여 답변에 더 가까워지고 나머지를 직접 해결하는 방법을 알아낼 수 있습니다.

또 다른 옵션은 회로를 사용하여 Pop Count (Sideway Add)를 찾아서 2에 대한 유일한 비트 일치 여부를 확인하는 것입니다. Logic Gates가 아닌 어셈블리의 유명한 예제 [Hakmem 169].http://home.pipeline.com/~hbaker1/hakmem/hacks.html#item169 (PopCount)].

"정확히 두 개는 진실이어야한다"와 "적어도 두 개는 사실이어야한다"는 의미 여부는 차이를 만듭니다.

변수 세트 {a..f}의 경우, Pax와 Charlie Martin의 응답은 "정확히 두 가지"상황 (두 개는 참이고 나머지는 거짓)을 다루었 고, 질문의 표현은 "at"을 다루는 것처럼 보였습니다. 최소 2 개의 "사례 :

(A && B) || (A && C) || ... || (D && E) || (D && F) || (E && F)

예를 들어 a와 b가 참이고 나머지 변수가 무엇이든 (참 또는 거짓) 할 때 사실입니다.

당신이 요구하는 것이 세트 이론과 같은 표현이라면 설명하다 위의 상황은 다음과 같이 표현할 수 있습니다.

#{x | x <- {A, B, C, D, E, F} | x} = 2

표기법이 이런 식으로 작동하는 곳 :

#{...}

밀폐 된 세트의 크기와 세트 자체를 나타냅니다.

{x | x <- {A, B, C, D, E, F} | x}

"세트"를 읽습니다 x, 어디 x 중 하나이다 A ~을 통해 F, 그리고 x 사실입니다 ". 즉, 변수 세트가 주어지면 A ~을 통해 F, 실제 값을 가진 변수로 구성된 서브 세트에는 정확히 두 개의 요소가 있습니다. (사용 <= 당신의 질문에 대한 다른 해석을 표현하기 위해 '='대신.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top