2010-01-15 2 views

답변

3

당신은 당신이 A * 알고리즘을 시도 할 수있는 문제를 찾는 경로로이 생각합니다.

(답 공간의 휴리스틱 기반 검색.) 또한

, 당신은 단지 솔루션 또는 최선의 해결책을 찾기 위해시겠습니까?

편집

나는이 변경과 같은 생각하지 않습니다,하지만 난 하나의 단계가 그것을 해결하기 때문에 내 예 나쁜 것을 알 수있다. 예제를 볼 때 그 이슈를 무시하십시오.

A * 작품 (그리고 약간이 문제에 적용) 방법의 빠른 개요

당신이 (완료의) 주어진 상태를 평가하는 기능을 필요로 A *를 사용합니다. 목표에 더 가까운 주에 더 높은 가치를 원합니다.

이 문제에 대한

두 예 기능

  • (* 1 올바른지 모든 편지) -
  • (* 10의 목표는 다른 문자의 수) (올바른 모든 편지 * 100) - (목표와 다른 글자 수)

첫 번째 호의 단어 크기를 볼 수 있듯이 올바른 문자 위에 근접합니다. 두 번째 호의 문자가 정확합니다.

어느 것이 더 좋은지 잘 모르겠다 - 균형 잡힌 식도 할 수 있습니다.

우리가 봇에서 얻을하려고하는 말을하자 ->

그런 다음 소년의 가능한 모든 변화를 평가 것은, 최초의 기능을 사용할 수 있습니다 보트 그래서이 부팅 박쥐 것 평가하는 것이 예 (및 기타 .) boot는 3의 값을 가지고 bat는 -7의 값을가집니다. Boot가 (이 함수에 따라) 더 나은 경우 Boot의 가능한 모든 변경 사항을 평가하고 (다른 것보다 먼저) 솔루션을 찾습니다.

진흙처럼 맑습니까? 어쩌면 위키 피 디아가 그것을 더 잘 설명해 줄지도 모른다.

http://en.wikipedia.org/wiki/A * _search_algorithm

사이드 참고 : 이러한 기능은주고 문제가있는 경우,이 기능이 바로 설계 경우 A *는 최선의 해결책을 찾을 수

  • . 이것이 A *의 깔끔한 특징입니다.

  • A * 향상은 주를 (예 : 위의 경우 - 양수 3은 매우 좋은 점수 (4 점은 최대 점수)이므로) 다른 국가를보고 이동하는 것을 멈출 수 있습니다 매우 가깝다.

  • A *의 두 개의 단단한 부분은 1) 올바른 기능을 찾고 2) 모든 가능한 상태를 열거 할 수 있습니다. 나는 2가 좋은 사전 파일과 빠른 해싱/검색 기능으로하기가 어렵지 않다고 생각한다. 귀하의 위키 피 디아 페이지에 따르면

+0

예, 경로를 찾으려면 먼저 그래프를 작성해야합니다. 또는 나는 틀린가? 첫 번째 단계는 그래프를 작성하는 것입니다 (제가 10000 단어 목록을 가지고 있다고 가정 해 봅시다). 두 번째 단계는 최단 경로를 찾는 것입니다. 두 번째 단계에 대한 알고리즘이 있지만 첫 번째 단계는 어떻게 수행합니까? – user251502

+1

@unknown : 평소와 같이 그래프를 작성하는 것이 일반적입니다. A * 검색에 대한 자습서는 더 자세히 설명해야합니다. –

+0

좋은 추론을 찾을 수있는 한 A *는 좋은 방법입니다. 항상 좋은이 문제에 대한 경험적 발견은 약간의 연구를 취할 것입니다. –

1

, 이러한 규칙이 있습니다 :

  1. 변경 편지
  2. 사용하여 편지를 제거 편지
  3. 추가 다른 순서로 같은 문자 (아나그램)

int를 부수는 데 도움이 될 수 있습니다. 그 4 하위 문제.

anagrams의 경우 매우 간단한 알고리즘이 있습니다. 각 단어가 알파벳순으로 정렬 된 문자와 함께 긴 단어로 저장되는 해시 테이블을 만듭니다. 예를 들어, races이라는 단어가 있다면 acers으로 바뀌고 cares의 아나 그램과 일치합니다.이 또한 acers입니다. 이들은 매우 빠르게 작동하는 경향이 있습니다.

글자를 추가하고 글자를 제거하는 것은 기본적으로 글자를 정렬 할 때까지 정렬 된 글자 목록을 만든 다음 추가 할 수있는 각 글자 또는 제거 할 수있는 글자마다 하나씩 찾습니다. .

동일한 패치를 사용하는 경우 편지를 변경하는 것이 가장 쉽습니다. 그 중 많은 부분이 떨어져 있기 때문입니다.

+0

편지를 정렬/해싱하는 것이 여기 유용 할 수는 없습니다. 우리가 보존하고자하는 구조 (문자 순서)가 파괴되므로 글자를 정렬하고 변경하면 우리는 모든 단어를 검색해야합니다. 문자는 정렬 될 때 새로운 정렬 된 문자와 같습니다. –

+0

죄송 합니다만, 나는 anagramming이 허용되었음을 깨닫지 못했습니다 (당신이 분명히 그것을 쓰고 있음에도 불구하고!) 그 경우 나는 이점을 볼 수 있습니다. +1. –

0

Levenshtein Distance 시작하는 것이 좋습니다. Levenshtein Distance를 계산할 때 허용되는 단계는 anagramming을 제외하고는 단어 사다리에서 허용되는 단계에 매우 가깝습니다. 아마도 L.D에 기반을 둔 A *와 함께 사용할 훌륭한 경험을 제공 할 수 있습니다.

+0

무거운 변조가없는 Levenshtein은 시작하기에 좋지 않습니다. 편집 거리의 개념은 어떤 단어가 유효한 단어를 만들지, 어떤 단어가 올바른 단어가 아닌지를 고려하지 않기 때문에 단어 사이의 거리를 일관되게 과소 평가하여 허용 할 수 없게 만듭니다 A *에 대한 휴리스틱. – kybernetikos

0

순수한 게임 버전에서는 한 가지 조작 만 수행 할 수 있습니다. 다른 문자로 교체하십시오. 여부를 결정하여 인접한 단어를

이 상당히 쉬운 검색을 위해 그래프를 구축하게,하지만 느린 4 또는 5와 같은 일반적인 길이의 단어를 주어진 ... 루트 단어

시작을 확인 단어는 글자의 위치가 중요한 단 한 문자 만 다릅니다.

처음 탐색, 검색 트리를 빌드하는 곳으로 시작하는 것이 좋습니다. 문제는 당신이 연결할 수없는 단어를 얻었지만 연결할 수 없다는 것을 확신하기 전에 대부분의 그래프를 통해 안내 할 때입니다. 폭 넓은 검색 기능은 근원 단어에서 목표 단어까지의 최단 경로를 제공합니다. 최단 경로가 반드시 가장 빠른 경로 일 필요는 없습니다.

관련 문제