문제

저는 dev-cpp와 wxwidgets를 사용하여 퍼즐을 푸는 프로그램을 만들었습니다.
사용자는 연산 블록과 결과 블록을 채워야 하며 프로그램이 이를 해결합니다.
무차별 대입을 사용하여 문제를 해결하고 있으며 재귀 알고리즘을 사용하여 반복되지 않는 9개 길이의 숫자 조합을 모두 생성합니다.그것은 꽤 빠르게 수행됩니다.
여기까지는 다 훌륭해요!
하지만 문제는 내 프로그램이 블록의 문자에 따라 작동할 때입니다.+, -, * 등에 대한 문자 비교로 인해 매우 느립니다(응답을 얻지 못합니다).나는 CASE를하고 있습니다.
연산자를 동적으로 생성할 수 있는 방법이나 프로그래밍 언어가 있습니까?따라서 연산자 ROW1COL2를 +로 정의할 수 있으며 다른 모든 작업에도 동일한 방식으로 정의할 수 있습니다.
퍼즐이 어떻게 작동하는지 더 쉽게 이해할 수 있도록 앱의 스크린샷을 남겨둡니다.
http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png


PD:알고리즘이 작동하고, 사소한 퍼즐로 시도해 보았고, 단 몇 초 만에 풀었습니다.

도움이 되었습니까?

해결책

이것이 실제로 당신이 찾고 있는 것인지 확실하지 않지만..
C++ 또는 C#과 같은 객체 지향 언어를 사용하면 "Operator" 기본 클래스를 만든 다음 이 기본 클래스에서 "PlusOperator" 또는 "MinusOperator" 등을 파생시킬 수 있습니다.이는 그러한 사례 진술을 피하는 표준 방법입니다.

그러나 이것이 성능 문제를 해결할 수 있을지 확신할 수 없습니다.
이러한 문제에 대해 단순한 무차별 대입을 사용하면 기하급수적인 솔루션을 얻을 수 있습니다.이것은 작은 입력의 경우 빠르게 작동하는 것 같습니다. 예를 들어 모든 숫자를 완성하는 경우입니다.그러나 작업을 완료하려면 더 많은 가능성이 있는 훨씬 더 큰 문제입니다.
따라서 CASE가 없어도 프로그램이 문제를 해결할 수 없을 가능성이 높습니다.

이러한 종류의 문제를 해결하는 올바른 방법은 일부 휴리스틱 기능을 사용하는 고급 검색 방법을 사용하는 것입니다.참조 A*(A-스타) 알고리즘 예를 들어.

행운을 빌어요!

다른 팁

숫자와 연산자를 객체로 표현할 수 있으므로 해석 시작 시 구문 분석은 한 번만 수행됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top