n 개의 항목을 테스트 할 때 가능한 한 적은 수의 s-subset으로 모든 t-subset을 덮는 방법은 무엇입니까?


10

이 문제는 소프트웨어 테스트에서 발생했습니다. 문제를 설명하기가 약간 어렵습니다. 먼저 예를 들어 문제를 일반화하려고합니다.

테스트 할 항목은 A에서 J로, 동시에 3 개의 항목을 테스트 할 수있는 테스트 도구가 있습니다. 테스트 도구의 항목 순서는 중요하지 않습니다. 물론 철저한 테스트를 위해서는 항목 조합이 필요합니다.10C3

문제는 더 복잡합니다. 한 쌍의 항목을 함께 테스트 한 후에는 동일한 쌍을 다시 테스트 할 필요가없는 추가 조건이 있습니다.

예를 들어 다음 세 가지 테스트를 실행 한 경우

알파벳

ADE

BDF

우리는 실행할 필요가 없습니다 :

ABD

A, B 쌍은 첫 번째 테스트 사례로, A, D는 두 번째로, B, D는 세 번째로 적용 되었기 때문입니다.

문제는 모든 쌍을 테스트하기 위해 필요한 최소 테스트 사례 수는 얼마입니까?

일반화하기 위해 n 개의 항목이있는 경우 s를 동시에 테스트 할 수 있으며 가능한 모든 튜플을 테스트해야합니다 (예 : s> t). 필요한 최소 테스트 사례 수는 얼마입니까? n, s 및 t의 항?

마지막으로 필요한 테스트 사례를 생성하는 데 유용한 알고리즘은 무엇입니까?


1
테스트는 "최적"(모든 튜플이 정확히 한 번 테스트 됨) 인 경우에 블록 디자인 개념이 적용됩니다 . 이러한 완벽한 테스트 가능성은 상대적으로 적으므로 추가 휴리스틱이 필요합니다. t
Hendrik 1

테스트 패러다임에 결함이 있습니다. 쌍만 테스트하는 것만으로는 충분하지 않을 수 있습니다. 3 개 이상의 구성 요소가 특정 조합으로 함께 작동하는 경우에만 일부 오류가 발생할 수 있습니다.
라파엘

4
@Raphael, 훨씬 더 나은 타이틀을 주셔서 감사하지만 실제 문제 또는 컨텍스트를 전혀 이해하지 못하고 "테스트 패러다임이 잘못되었다"고 주장하는 방법을 완전히 이해하지 못합니다.
wookie919

@ wookie919 컨텍스트를 제공 하지 않고 일반적인 문제를 야기 하기 때문 입니다. 나는 일반적으로 (실제로) 발생할 수있는 모든 조합을 테스트해야 할 수도 있다는 것을 관찰했습니다.
Raphael

답변:


11

원하는 블록 설계 (한 번에 3 가지를 테스트하고 모든 쌍을 포함)를 Steiner triple systems 이라고 합니다 . 스타이너 트리플 시스템이 n1or3mod6일때마다 3 배가되고, 알고리즘은 이들을 구성하는 것으로 알려져있다. 예를 들어,이MathOverflow 질문(작동중인 Sage 코드에 대한 링크가 있음)을 참조하십시오. 기타의 경우N, 다음에 반올림 수N'1OR3모드(6), 및이 삼중 시스템의 수정을 사용하여N'에 대한 모든 쌍을 충당하기 위해N을.13(n2)n1 or 36nn1 or 36nn

다른 대한 최상의 구성을 원하면 필요한 트리플 수는 커버링 수 C ( n , 3 , 2 ) 이며 정수 시퀀스의 온라인 백과 사전 에서이 항목 으로 제공됩니다 . 이것은 좋은 피복재가있는 La Jolla Covering Repository 와 연결됩니다 . 정수 시퀀스의 온라인 백과 사전은 C ( n , 3 , 2 )에 대한 추측 공식을 제공합니다.n C(n,3,2)C(n,3,2); 이 공식이 유지되면 직관적으로 이러한 표지를 구성하는 알고리즘 방법이 좋을 것입니다.하지만 공식이 추측되기 때문에 현재 아무도 그것을 알고 있지 않습니다.

높은 커버링 수의 경우 보다 좋은 커버링을 찾기가 어렵고 저장소는 알려진 효율적인 알고리즘보다 더 나은 솔루션을 제공합니다.C(n,3,2)


5

각 정점이 한 쌍의 항목이고 두 항목이 공통된 항목을 공유하는 경우 두 정점 사이에 모서리가있는 무 방향 그래프 형성합니다 . 즉, G = ( V , E ) 여기서 V = { { a , b } : a , b 항목 a b }E = { ( s , t ) : s , t V | 에스GG=(V,E)V={{a,b}:a,bItemsab} 입니다. 그래프는 ( nE={(s,t):s,tV|st|=1} 정점, 모든 정점에는2n-4 개의모서리가 입사합니다.(n2)2n4

그런 다음 한 가지 접근법은 에서 최대 일치를 찾는 것 입니다. 에드몬드 알고리즘은 다항식 시간에서 최대 매칭을 찾는 데 사용될 수 있습니다. 운이 좋으면 완벽한 매칭을 제공 할 수 있습니다. 일치하는 각 에지 ( { A , B } , { B , C } ) E 는 테스트 사례 A B C에 해당 합니다. 모든 정점이 완벽하게 일치하는 한 모서리로 입사하므로 ( nG({A,B},{B,C})EABC테스트 사례, 이는1.5의 최적 요소내에있습니다. 완벽하게 일치하지 않으면 전체 적용 범위를 달성하기 위해 필요에 따라 몇 가지 테스트 사례를 추가하십시오.(n2)/21.5


4

t = 2 의 경우 최소한 ( ns=3t=2시험이 있기 때문에 ( N(n2)/3 쌍과 모든 테스트는 3 쌍을 다룹니다. 즉, 사소한 일을 수행하고 ( n(n2) 테스트하고 최적보다 3 배 더 나쁜 요소입니다.(n2)

실제로 이것을 프로그래밍하는 경우 이것을 최적화하는 방법은 먼저 임의의 숫자 테스트를 무작위로 선택한 다음 지금까지 테스트에서 다루지 않은 쌍에 대해 무차별 대입을 수행하는 것입니다.


일반 t 의 경우 하한은 ( nst 시험. 상한의 경우C ( n(nt)/(st)테스트.C(nt)(st)log((nt))O(t(ntst)tlog(n))

sS[n]tX[n]Pr[XS]=(ntst)(ns)C(nt)log((nt))

Pr[X does not belong to any of them]=(1(ntst)(ns))C(nt)log((nt))exp(C(ntst)(nt)(ns)(st)log((nt)))=exp(Clog(nt))1/(nt).

O(t(ntst)tlog(n))t


매우 통찰력있는 답변에 감사드립니다. 그러나 정확히 생성하는 정확한 알고리즘을 찾고있었습니다.(nt)/s
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.