당신이 나를 도울 수 있기를 바랍니다.중복 배열을 찾기 위해 너무 오래 걸립니다
다음과 같은 행을 포함하는 135,000 개의 긴 txt 파일이 있습니다 : 111706469;1972WE;26;Wel
.
프로그램에서 수행해야하는 작업은 이전에 온 모든 줄마다 모든 줄을 비교하여 80 % 이상 유사한 지 확인한 다음 원래 줄의 줄 번호를 지정합니다.
나는 이런 식으로 스스로 할 수 있었던 것들.
if (rows.Length > 1) {
for (int rowIndex = 1; rowIndex < rows.Length; rowIndex++)
{
string cols = rows[rowIndex];
bool Dubbel = false;
for (int DupIndex = 0; DupIndex < rowIndex; DupIndex++)
{
string SearchDup = rows[DupIndex];
decimal ComparisonResult = Compare(cols, SearchDup);
if (ComparisonResult > 80)
{
cols += ";" + DupIndex;
Dubbel = true;
break;
}
}
Console.WriteLine(rowIndex + ";" + cols);
}
}
이것은 프로그램이 모든 배열 항목에 대해 계속해서 배열을 통과해야 함을 의미합니다. 내 질문은, 거기에 빠른/더 나은 방법이 일을 무엇입니까?
도움을 주시면 감사하겠습니다.
이전에 만난 모든 문자열을 반복해서 검색하는 대신 사전에 저장하십시오.이것은 당신의 알고리즘을 O (N *) 대신에 O (N *)로 실행하게 할 것입니다. – Alexander
@Alexander - 대답이어야합니다. 나는 그것을 upvote 줄. – Bobson
여기의 어려움은 정확하지 않은 일치를 의미하는 비교 방법입니다. 사전에 모든 것을 저장하고 정확한 일치를 수행 할 수는 없습니다. 아마도 Compare의 구현은 약간의 빛을 줄 수 있습니다. 문자열 유사성을 어떻게 찾을 수 있습니까? 정확한 위치 일치입니까, 아니면 복잡한 구문 분석이있을 것입니까, 아마도 해밍 거리입니까? – Alexander