두 문단의 열로 된 텍스트 단락이 있습니다. 내 임무의 목적은 그것을 해독하는 것입니다두 개의 char 열의 텍스트 스크램블을 해결하기위한 접근 방법
|de| | f|Cl|nf|ed|au| i|ti| |ma|ha|or|nn|ou| S|on|nd|on|
|ry| |is|th|is| b|eo|as| | |f |wh| o|ic| t|, | |he|h |
|ab| |la|pr|od|ge|ob| m|an| |s |is|el|ti|ng|il|d |ua|c |
|he| |ea|of|ho| m| t|et|ha| | t|od|ds|e |ki| c|t |ng|br|
|wo|m,|to|yo|hi|ve|u | t|ob| |pr|d |s |us| s|ul|le|ol|e |
| t|ca| t|wi| M|d |th|"A|ma|l |he| p|at|ap|it|he|ti|le|er|
|ry|d |un|Th|" |io|eo|n,|is| |bl|f |pu|Co|ic| o|he|at|mm|
|hi| | |in| | | t| | | | |ye| |ar| |s | | |. |
내 현재의 접근 방식은 컬럼의 올바른 순서가 반복적으로 단어 발생 횟수 기준에 따라 각 컬럼의 최적의 위치를 찾기 위해 노력하고있다 찾을 수 있습니다.
내가 생각하고있는 알고리즘의 핵심의 의사 코드는 다음과 같습니다
function unscramble(scrambledMatrix,indexOfColumnIveJustMoved)
for each column on scrambledMatrix as currentIndex=>currentColumn
if (currentIndex!=indexOfColumnIveJustMoved)
maxRepeatedWords=0;maxIndex=0;
for (i=0;i<numberOfColumnsOfScrambledMatrix;i++)
repWordsCount=countRepWords(moveFromToOn(currentIndex,i,scrambledMatrix))
if (maxRepeatedWords<repWordsCount)
maxRepeatedWords=repWordsCount;
maxIndex=i;
endif
endfor
if (maxIndex!=currentIndex)
return unscramble(moveFromToOn(currentIndex,maxIndex,scrambledMatrix),maxIndex); //recursive call
endif
endif
endfor
return(scrambledMatrix); //returns the unscrambled matrix;
endfunction
알고리즘은 더 열이 각 하나를 반복 한 후 이동하지 않을 경우 중단됩니다. 글자가 글자로 된 단어를 기반으로하고 표본이 충분히 크면 모든 언어 (영어에 대한 솔루션에만 관심이 있지만)에서 작동해야한다고 생각합니다.
다른 접근 방식이나 개선점에 대해 제안 하시겠습니까? 나는이 문제에 대한 최선의 해결책을 알고 싶다. (아마 사전을 쓰는 대신에 일반적인 단어의 출현을 원한다. 재귀를 피하기 위해 알고리즘을 재구성하는 것이 훨씬 빠를까?).