다음을 수행 할 수있는 알고리즘을 찾으려고합니다. 부울 변수가 10 개 있다고 가정하고 모든 조합을 시도하고 싶습니다. 내 목표는 모든 조합을 찾는 것이므로 그 결과 내 방법 중 하나에 결과로 줄 것이다. (이 방법에는 많은 제한이 있기 때문에 모든 가능한 조합을 테스트해야하며 문제를 해결할 조합이없는 경우 사용자에게 알리고 싶다. 이). 이해할 수 있기를 바랍니다!가능한 모든 부울 변수 조합
1
A
답변
1
마지막으로 좀 더 효율적인 방법을 생각해 냈습니다. 바이너리 숫자 사용 : 변수 8 개 중에서 가능한 모든 부울 값 조합을 테스트하고 싶다고 가정 해 봅시다 : 다음을 선택하면 모든 조합을 테스트합니다 :
public string CombinationFinder()
{
for (int i = 0; i < 2^8; i++)
{
String ans = Convert.ToInt32(i, 2).ToString();
if (myMethod(ans))
{
return ans;
}
}
return null;
}
이 0에서 255로 이동되는 00000000의 각 디지트가 부울 표현 될 수있는 값은 0 또는 1을 취 11111111 가는 이진 수단이다. 이 예에서는, 결합이 발견되지 않는 경우, 메소드는 null를 돌려줍니다.
7
이 시도 :
for (int i = 0; i < (1 << 10); i++)
{
bool b1 = (i & (1 << 0)) != 0;
bool b2 = (i & (1 << 1)) != 0;
bool b3 = (i & (1 << 2)) != 0;
bool b4 = (i & (1 << 3)) != 0;
...
if (MyMethod(b1, b2, b3, b4, ...))
{
// Found a combination for which MyMethod returns true
}
}
당신은 물론, 사용할 수 LINQ를 :
class Bint
{
int num;
public bool this[int num]
{
get {return num << n & 0x1 == 1;}
}
public int Num
{
get {return num;}
set {num = value;}
}
}
및 숫자를 반복 :
이var result = from b1 in new[] { false, true }
from b2 in new[] { false, true }
from b3 in new[] { false, true }
from b4 in new[] { false, true }
...
where MyMethod(b1, b2, b3, b4, ...)
select new { b1, b2, b3, b4, ... };
0
이 같은 클래스를 정의 :
Bint n = new Bint();
for (int i = 0; i < Math.pow(2,10); i++)
{
n.Num = i;
f(n[0],n[1]...);
}
0
저는 이것이 오래된 질문이지만 waclock의 대답은 컴파일되지 않습니다 (C#에는 지수 연산자가 없음). DTB의 응답이 방법의 99 %를 얻을 수 있지만,이 대답이 제공하는 것입니다 논리 값의 알 수없는 번호를 처리하지 않습니다
이var props = typeof(TypeWithBooleans).GetProperties().Where(prop => prop.PropertyType == typeof(bool)).ToArray();
for (var i = 0; i < (1 << props.Length); ++i)
{
var combination = Enumerable.Range(0, props.Length).Select(j => (i & (1 << j)) != 0).ToArray();
if (MyMethod(combination)) {
// handle match
};
}
이 가정을 당신이 하나의 클래스에 국한되어 관심있는 모든 논리 값/struct이고, MyMethod
은 params 배열을 사용합니다.
관련 문제
- 1. 목록의 모든 가능한 조합
- 2. 가능한 모든 조합 찾기
- 3. 가능한 모든 요소 조합
- 4. 가능한 모든 조합
- 5. 가능한 모든 알파벳 암호 조합
- 6. 가능한 모든 행 조합 테스트
- 7. 파이썬 : "동적"목록의 모든 가능한 조합
- 8. 목록에 가능한 모든 목록의 조합 만들기
- 9. 범위 내에서 가능한 모든 조합 계산 R
- 10. 중첩 된 사전에서 가능한 모든 조합 생성
- 11. .NET - ORM 및 가능한 모든 조합 - ViewModel?
- 12. Divide and Conquer - 모든 가능한 조합 비교
- 13. mysql을 사용하여 가능한 모든 문자열 조합 찾기
- 14. 파이썬에서 가능한 모든 변수 유형
- 15. 모든 조합 트리 알고리즘
- 16. PHP 모든 조합 찾기
- 17. 부울 데이터의 조합 수를 계산하는 방법 R
- 18. 가능한 왕복 노선 수 조합
- 19. 조합 가능한 원자 적 작업
- 20. API와 Python을 사용하여 가능한 모든 문자 조합 찾기
- 21. 배열에서 가능한 모든 고유 한 조합 목록 만들기 (VBA 사용)
- 22. 정수 함수에서 다중 인수에 해당하는 다중 배열의 모든 가능한 조합
- 23. 큰 행렬에서 특정 수의 행을 선택하기위한 가능한 모든 조합 생성하기
- 24. 생성 행을 이동하여 2D 배열의 가능한 모든 조합
- 25. 모든 이진 조합 생성 C++
- 26. 모든 요소 조합 생성
- 27. 문자 배열의 모든 조합
- 28. 모든 문자 조합 생성
- 29. 부울 대보다 구체적인 변수
- 30. 부울 변수 이름 제안
나는 자러 갈거야, 거의 새벽 3시에 일찍 일어나야 해. 내일 알게 될거야.하지만 내가 볼 수있는 것에서는 효과가있을 거라고 생각해! :) thanks – waclock
이것이 적용될 수있는 방법은 없지만 많은 X 변수 (내가 얼마나 많은 부울을 가지는지 알지 못한다는 것은 사용자가 선택하는 것에 달려 있음을 의미합니다). 저는 syntaxys에 익숙하지 않아서 묻습니다. :) – waclock