'cook'과 같은 단어가 있다고 가정 해보자. 각 단어를 다른 모든 문자로 바꾸면 그 단어에서 가능한 모든 단어의 그래프를 생성하려고합니다. 중요한 제한 사항 : 글자 모음이 단어인지 사전에 요청할 수 있지만 이는 사전에 대한 인터페이스의 한계입니다. 사전에 n 문자로 된 모든 단어를 요청할 수는 없습니다. 그래서문자 교체 단어를 생성하는 데 큰 시간이 필요합니까?
cook
/ | \
aook ... zook
/| \ /| \
aaok ... azok zaok ... zzok
그리고를 다음과 같이 내가 이것을 상상
는 DAG를 생성하는 재귀 알고리즘 될 것이다. 분명히 실제로 이러한 순열 중 많은 수가 실제 단어가 아니라고 거부 될 것이지만 결국에는 생성 될 수있는 모든 '단어'를 포함하는 DAG를 갖게됩니다. 그래프의 높이는 입력 단어의 길이에 1을 더한 값이됩니다.
최악의 경우, 각 순열은 단어입니다. 첫 번째 레벨은 1 단어, 두 번째 레벨은 25, 다음 레벨 (25 * 25) 등이 있습니다. 따라서 n이 단어의 길이라면, 알고리즘이 최악의 경우의 시간 복잡도가 25^n이고 최악의 경우의 저장 복잡성이 25^n이라는 것을 의미한다고 생각하면 정확합니까?
이 알고리즘은 올바르지 않거나 비효율적으로 들립니다. 그래프가 왜 DAG입니까? 왜 첫 번째 수준은 첫 번째 문자를 변경하여 시작합니까? 처음 세 글자를 바꾸지 않고 (또는 원래의 값으로 "변경"하지 않고) 방귀 -> 농장 허용이 가능합니까? – user2357112
그래프는 방향이 있고 비순환 적이기 때문에 DAG입니다. 첫 번째 레벨은 첫 번째 문자를 변경함으로써 시작됩니다. 왜냐하면 각 위치의 문자를 가능한 모든 변형으로 변경하여 가능한 모든 단어를 생성하기 때문입니다.그리고 결국 당신은 방귀 -> 농장에 도착하게 될 것입니다 ... 그러나 당신은 또한 단어를 순차적으로 걷음으로써 '다트', '요새'등을 생성 할 것입니다. 가능한 모든 단어 변형을 생성하는 방법에 대한 또 다른 제안이 있으면 기쁘게 생각합니다. –
요점은 원래 단어의 문자 수를 변경하여 만들 수있는 모든 단어를 찾는 것일뿐 아니라 단순히 사전에서 길이 n의 모든 단어 목록을 검색 할 수 있습니다. – Faibbus