2013-11-04 2 views
0

나는 큰 숫자의 벡터, 예를 들어 500 개의 숫자를 가지고있다. 순서의패턴 인식 - "이것이 패턴입니까?"

  • 크기입니다 : 숫자의 순서가 패턴의 경우이다

    : 나는 패턴을 다음과 같은 규칙에 따라 같은 벡터 (이 경우 재발)을 감지하는 프로그램을 싶습니다 3에서 20 사이의 숫자.

  • 순서대로 숫자의 RELATIVE 위치는 벡터에서 번에 반복됩니다. 예를 들어 시퀀스 (1,4,3)과 벡터의 다른 곳 (3,6,5)이있는 경우 (1,4,3)는 패턴입니다. ((2,5,4), (3,6,5) 등)

  • 시퀀스는 교차 할 수 없습니다. 따라서 벡터 (1,2,3,4,5)에는 패턴 (1,2,3) 및 (3,4,5)가 포함되어 있지 않습니다 (두 시퀀스 모두 에는 같은 번호를 사용할 수 없습니다). 그러나, (1,2,3,3,4,5)는 패턴을 포함한다. (1,2,3) (또는 (3,4,5))

  • 패턴 B의 서브 세트 A는 패턴이 단지 어딘가 B 밖에있을 때만 패턴이 나타납니다. 따라서 벡터 (1,2,3,4,7,8,9,2,3,4,5)는 패턴 (1,2,3, (1,2,3,4)가 반복되어 ((2,3,4,5)의 형태로 반복되고 (1,2,3) 반복되기 때문에 (4,3) 형태로 (7,8,9)). 그러나 벡터가 (1,2,3,4,2,3,4,5)이면 유일한 패턴은 입니다 (1,2,3,4). 왜냐하면 (1,2,3)은 (1,2,3,4)의 맥락에서

나는 몇 가지를 알고 싶습니다 : 모든

먼저 나는 규칙이 서로 가지 마세요 바랍니다. 나는 그 (것)들을 나 자신에게 만들었다. 그래서 내가 알아 차리지 못했던 충돌이있을 수도있다.

둘째, 어떻게 이러한 시스템을 가장 효율적으로 구현할 수 있습니까? 누군가 주제에 관한 특정 문헌을 지적 할 수 있습니까? 3, 4,5, 20까지 모든 하위 집합에 대해 시퀀스 반복 검색을 시작으로 숫자로 갈 수 있습니다.하지만 매우 효율적이지는 않습니다. C로 시스템을 구현하는 데 관심이 있지만 일반적인 안내는 대단히 환영합니다.

미리 감사드립니다. 관찰

+0

500은 매우 큰 벡터가 아니므로 성능에별로 신경 쓰지 않고 먼저 작동하는 것을 작성합니다. 그런 식으로, 나중에, "더 나은"구현을 테스트 할 무언가가 있습니다. –

답변

2

그냥 몇 : 일단

Original numbers: 
1 4 3 2 5 1 1 3 6 5 6 2 5 4 4 4 1 4 3 2 
*********     *********  *********   ********* 
Difference values: 
    3 -1 -1 3 -4 0 2 3 -1 1 4 3 -1 -3 0 -3 3 -1 -1 
    ******      ******   ******    ****** 

:

당신이 상대 값에 관심이 있다면

, 당신의 첫 번째 단계는 벡터의 인접 요소, 예를 들면 사이의 차이를 계산하는 것 데이터를 반복적으로 찾으려면 autocorrelation 메서드를 사용할 수 있습니다. O (n 로그 n) 시간으로 계산할 수 있으며 정확한 일치에만 관심이있는 경우 더 빠를 수도 있습니다.

+0

좋은 출발점처럼 보입니다. – redFur

+0

그냥이 종이를 발견, 또한 매우 도움이됩니다. 누군가가 관심을 끌기 위해 여기에 남겨 두겠습니다 .http : //ismir2004.ismir.net/proceedings/p046-page-246-paper148.pdf – redFur