이중/단어 래더를 찾는 효율적인 알고리즘이 있습니까? 그것은 무차별 대공을 행할 수 있지만 더 좋은 방법이 있어야합니다. 방법?이중/단어 래더를 찾는 가장 좋은 알고리즘은 무엇입니까?
http://en.wikipedia.org/wiki/Word_Ladder
이중/단어 래더를 찾는 효율적인 알고리즘이 있습니까? 그것은 무차별 대공을 행할 수 있지만 더 좋은 방법이 있어야합니다. 방법?이중/단어 래더를 찾는 가장 좋은 알고리즘은 무엇입니까?
http://en.wikipedia.org/wiki/Word_Ladder
당신은 당신이 A * 알고리즘을 시도 할 수있는 문제를 찾는 경로로이 생각합니다.
(답 공간의 휴리스틱 기반 검색.) 또한
, 당신은 단지 솔루션 또는 최선의 해결책을 찾기 위해시겠습니까?
편집
나는이 변경과 같은 생각하지 않습니다,하지만 난 하나의 단계가 그것을 해결하기 때문에 내 예 나쁜 것을 알 수있다. 예제를 볼 때 그 이슈를 무시하십시오.
A * 작품 (그리고 약간이 문제에 적용) 방법의 빠른 개요
당신이 (완료의) 주어진 상태를 평가하는 기능을 필요로 A *를 사용합니다. 목표에 더 가까운 주에 더 높은 가치를 원합니다.
이 문제에 대한두 예 기능
첫 번째 호의 단어 크기를 볼 수 있듯이 올바른 문자 위에 근접합니다. 두 번째 호의 문자가 정확합니다.
어느 것이 더 좋은지 잘 모르겠다 - 균형 잡힌 식도 할 수 있습니다.
우리가 봇에서 얻을하려고하는 말을하자 ->
그런 다음 소년의 가능한 모든 변화를 평가 것은, 최초의 기능을 사용할 수 있습니다 보트 그래서이 부팅 박쥐 것 평가하는 것이 예 (및 기타 .) boot는 3의 값을 가지고 bat는 -7의 값을가집니다. Boot가 (이 함수에 따라) 더 나은 경우 Boot의 가능한 모든 변경 사항을 평가하고 (다른 것보다 먼저) 솔루션을 찾습니다.
진흙처럼 맑습니까? 어쩌면 위키 피 디아가 그것을 더 잘 설명해 줄지도 모른다.
http://en.wikipedia.org/wiki/A * _search_algorithm
사이드 참고 : 이러한 기능은주고 문제가있는 경우,이 기능이 바로 설계 경우 A *는 최선의 해결책을 찾을 수
. 이것이 A *의 깔끔한 특징입니다.
A * 향상은 주를 (예 : 위의 경우 - 양수 3은 매우 좋은 점수 (4 점은 최대 점수)이므로) 다른 국가를보고 이동하는 것을 멈출 수 있습니다 매우 가깝다.
A *의 두 개의 단단한 부분은 1) 올바른 기능을 찾고 2) 모든 가능한 상태를 열거 할 수 있습니다. 나는 2가 좋은 사전 파일과 빠른 해싱/검색 기능으로하기가 어렵지 않다고 생각한다. 귀하의 위키 피 디아 페이지에 따르면
, 이러한 규칙이 있습니다 :
int를 부수는 데 도움이 될 수 있습니다. 그 4 하위 문제.
anagrams의 경우 매우 간단한 알고리즘이 있습니다. 각 단어가 알파벳순으로 정렬 된 문자와 함께 긴 단어로 저장되는 해시 테이블을 만듭니다. 예를 들어, races
이라는 단어가 있다면 acers
으로 바뀌고 cares
의 아나 그램과 일치합니다.이 또한 acers
입니다. 이들은 매우 빠르게 작동하는 경향이 있습니다.
글자를 추가하고 글자를 제거하는 것은 기본적으로 글자를 정렬 할 때까지 정렬 된 글자 목록을 만든 다음 추가 할 수있는 각 글자 또는 제거 할 수있는 글자마다 하나씩 찾습니다. .
동일한 패치를 사용하는 경우 편지를 변경하는 것이 가장 쉽습니다. 그 중 많은 부분이 떨어져 있기 때문입니다.
편지를 정렬/해싱하는 것이 여기 유용 할 수는 없습니다. 우리가 보존하고자하는 구조 (문자 순서)가 파괴되므로 글자를 정렬하고 변경하면 우리는 모든 단어를 검색해야합니다. 문자는 정렬 될 때 새로운 정렬 된 문자와 같습니다. –
죄송 합니다만, 나는 anagramming이 허용되었음을 깨닫지 못했습니다 (당신이 분명히 그것을 쓰고 있음에도 불구하고!) 그 경우 나는 이점을 볼 수 있습니다. +1. –
Levenshtein Distance 시작하는 것이 좋습니다. Levenshtein Distance를 계산할 때 허용되는 단계는 anagramming을 제외하고는 단어 사다리에서 허용되는 단계에 매우 가깝습니다. 아마도 L.D에 기반을 둔 A *와 함께 사용할 훌륭한 경험을 제공 할 수 있습니다.
무거운 변조가없는 Levenshtein은 시작하기에 좋지 않습니다. 편집 거리의 개념은 어떤 단어가 유효한 단어를 만들지, 어떤 단어가 올바른 단어가 아닌지를 고려하지 않기 때문에 단어 사이의 거리를 일관되게 과소 평가하여 허용 할 수 없게 만듭니다 A *에 대한 휴리스틱. – kybernetikos
순수한 게임 버전에서는 한 가지 조작 만 수행 할 수 있습니다. 다른 문자로 교체하십시오. 여부를 결정하여 인접한 단어를
이 상당히 쉬운 검색을 위해 그래프를 구축하게,하지만 느린 4 또는 5와 같은 일반적인 길이의 단어를 주어진 ... 루트 단어
시작을 확인 단어는 글자의 위치가 중요한 단 한 문자 만 다릅니다.
처음 탐색, 검색 트리를 빌드하는 곳으로 시작하는 것이 좋습니다. 문제는 당신이 연결할 수없는 단어를 얻었지만 연결할 수 없다는 것을 확신하기 전에 대부분의 그래프를 통해 안내 할 때입니다. 폭 넓은 검색 기능은 근원 단어에서 목표 단어까지의 최단 경로를 제공합니다. 최단 경로가 반드시 가장 빠른 경로 일 필요는 없습니다.
예, 경로를 찾으려면 먼저 그래프를 작성해야합니다. 또는 나는 틀린가? 첫 번째 단계는 그래프를 작성하는 것입니다 (제가 10000 단어 목록을 가지고 있다고 가정 해 봅시다). 두 번째 단계는 최단 경로를 찾는 것입니다. 두 번째 단계에 대한 알고리즘이 있지만 첫 번째 단계는 어떻게 수행합니까? – user251502
@unknown : 평소와 같이 그래프를 작성하는 것이 일반적입니다. A * 검색에 대한 자습서는 더 자세히 설명해야합니다. –
좋은 추론을 찾을 수있는 한 A *는 좋은 방법입니다. 항상 좋은이 문제에 대한 경험적 발견은 약간의 연구를 취할 것입니다. –