2014-03-27 2 views
3

고유 한 코드 (숫자/문자 수락)의 SQL 데이터베이스가 있습니다.코드 시리즈 생성 및 이전 코드를 고려하십시오.

이 데이터베이스에 대해 많은 양의 새 코드를 생성하려고합니다. 또한 모든 종류의 시드 또는 유사 코드로 생성되지 않은 이전 코드를 고려해야합니다.

그럼 어떻게하면 좋을까요? 현재 완료된 방법은 생성 된 각 코드에 대해 데이터베이스의 모든 코드를 반복하고 levenshtein 거리가 작지 않은지 확인하는 것입니다. 그러나 이것은 데이터베이스가 커지면서 이제는 오래 걸립니다.

도움을 주시면 감사하겠습니다. 이것은 ASP.NET C# 응용 프로그램에서 사용됩니다.

+1

이러한 코드를 생성하기위한 패턴이 있습니까? 예를 들어 숫자가 순차적으로 순차적입니까? 편지가 함께 있습니까? ... –

+0

내가 가진 것은 각 코드와 연결된 일련 ID입니다. 그러나 코드는 완전히 무작위로 패턴이 없습니다. – JuhaKangas

답변

0

총 코드 수, 코드 길이 및 허용되는 Levenshtein 거리가 충분히 작 으면 새 코드를 생성하는 시간을 줄이기 위해 메모리에 기존 코드와 해당 Levenshtein 이웃 트리를 작성할 수 있습니다 ~ O (ln N). 코드가 너무 많으면 코드와 이웃을 포함하는 추가 SQL 테이블을 만들고 O (ln N) 검색을 위해 SQL에 의존 할 수 있습니다. 새 코드를 삽입 할 때 이웃 코드를 함께 삽입하십시오.

유연성이있는 경우, 즉 코드 길이를 1 씩 늘리거나 허용되는 문자 집합에 새 문자를 추가하거나 사용하지 않은 문자가있는 경우 가장 좋은 해결책은 '오래된 문자 '및'새로운 '코드 공간을 생성하고 알고리즘 요구 사항을 충족시키기 위해 새로운 알고리즘을 생성합니다. 이 접근법은 컴퓨터의 MAC 주소를 사용하지 않기로 결정했을 때 UUID/GUID에 채택되었습니다.

+0

그래, 내가 새 코드가 필요할 때마다 그렇게해야 할 것 같아서 계속 성장할 것 같니? 두 번째 해결책은 실제로 가장 좋은 해결책입니다. 이를 위해 알고리즘이나 라이브러리에 대한 제안 사항이 있습니까? – JuhaKangas

+0

특별한 것은 없지만 두려워요. L- 거리에 의해 분리되는 코드에 대한 요구 사항은 직접적으로 성취하기가 매우 어렵습니다. 아마도 가장 일반적인 접근법은 가장 일반적인 클래스의 오류 (전치, 잘못된 단일 문자 등)를 감지 및/또는 수정하는 데 도움이되는 하나 또는 두 개의 검사 문자를 추가하는 것입니다. 신용 카드 및 은행 계좌 번호는 이러한 구성표를 사용합니다. 거기에서 검색 할 수 있습니다. 코드와 순차 번호를 변환하는 방법은 대칭 키 암호화 방식이 일반적입니다. –