Haskell에서 반복 관계 계산
-
28-10-2019 - |
문제
인사말, StackOverflow.
S (i, j) 를 계산하기 위해 다음과 같은 두 개의 반복 관계가 있다고 가정 해 보겠습니다.
S (0,0) , S (0,1) , S (1,0) 값을 계산하고 싶습니다., S (2,0) 등 ... 점근 적으로 최적의 방식으로.몇 분 동안 연필과 종이를 사용하면 여러 가지 방법으로 가로 지르는 나무와 같은 구조로 펼쳐집니다.이제 나중에 트리가 유용 할 것 같지 않으므로 지금은 [[S(00)],[S(10),S(01)],[S(20),S(21),S(12),S(02)],...]
와 같은 중첩 된 목록을 생성하려고합니다. S (i, 0) (또는 첫 번째 인수에 따라 S (0, j) )의 단순 목록을 생성하는 함수를 만들었습니다.
라코 디스
하지만 더 진행할 방법이 부족합니다.
해결책
직접 재귀 스타일로 작성하고 메모를 사용하여 순회를 만드는 것이 좋습니다. 라코 디스
라이브러리는 이미 계산 한 값을 저장할 무한 테이블을 생성합니다.메모 생성자가 p
매개 변수 아래에 있으므로 p
범위에 대한 테이블이 존재합니다.즉, osrr 1 2 3은 A (2,3) 계산을위한 테이블을 생성 한 다음 정리합니다.다음을 부분적으로 적용하여 특정 유전자 태그 코드에 테이블을 재사용 할 수 있습니다.
라코 디스
이제 p
는 모든 호출간에 테이블을 공유합니다 (상황에 따라 원하는 것이 될 수도 있고 아닐 수도 있음).
다른 팁
먼저 말하지 않은 경계 조건이 있어야합니다.
그것이 있으면 솔루션을 재귀 적으로 정의 된 배열로 지정해보십시오.이것은 i와 j의 상한을 아는 한 작동합니다.그렇지 않으면 메모 조합기를 사용하십시오.