나는이 질문을하는 데 올바른 용어를 알지 못하므로 대신 많은 단어로 설명 할 것입니다.
Background , 우리는 같은 페이지에 있습니다 : 프로그램에는 종종 캐시가 포함되어 있습니다-시간 / 메모리 균형. 일반적인 프로그래머의 실수는 업스트림 소스 / 전례 중 하나를 변경 한 후 캐시 된 값을 업데이트하는 것을 잊는 것입니다. 그러나 데이터 흐름 또는 FRP 프로그래밍 패러다임은 이러한 실수에 영향을받지 않습니다. 순수한 함수가 여러 개 있고 방향성 종속성 그래프로 함께 연결하면 노드는 함수의 입력이 변경 될 때까지 출력 값을 캐시하고 재사용 할 수 있습니다. 이 시스템 아키텍처는 데이터 흐름 기반 환경 에서 캐싱 (Caching in Dataflow-Based Environments) 문서에 설명되어 있으며 명령 언어는 메모와 거의 비슷합니다.
문제 : 함수의 입력 중 하나가 변경 될 때, 우리는 여전히 함수 전체를 실행하여 캐시 된 출력을 버리고 처음부터 다시 계산해야합니다. 많은 경우에, 이것은 나에게 낭비 인 것 같습니다. "상위 5 가지"목록을 생성하는 간단한 예를 고려하십시오. 입력 데이터는 정렬되지 않은 목록입니다. 정렬 된 목록을 출력하는 함수에 입력으로 전달됩니다. 이는 처음 5 개 항목 만 취하는 함수에 입력됩니다. 의사 코드에서 :
input = [5, 20, 7, 2, 4, 9, 6, 13, 1, 45]
intermediate = sort(input)
final_output = substring(intermediate, 0, 5)
정렬 함수의 복잡성은 O (N log N)입니다. 그러나이 흐름은 하나의 요소를 추가하여 입력이 한 번에 조금만 변경되는 애플리케이션에서 사용된다는 점을 고려하십시오. 매번 처음부터 다시 정렬하는 대신 실제로 O (N)는 새 요소를 올바른 위치에 삽입하여 이전 캐시 정렬 목록을 업데이트하는 함수를 사용하는 것이 더 빠릅니다. 이것은 하나의 예일뿐입니다. 많은 "처음부터"기능에는 "증분 업데이트"기능이 있습니다. 또한 새로 추가 된 요소는 5 번째 위치 이후로 final_output에도 나타나지 않을 수 있습니다.
내 직감은 이러한 "증분 업데이트"기능을 기존 "처음부터"기능과 나란히 데이터 흐름 시스템에 추가하는 것이 가능할 수 있다고 제안합니다. 물론 모든 것을 처음부터 다시 계산하면 항상 증분 업데이트를 수행하는 것과 동일한 결과를 제공해야합니다. 이 시스템은 그 특성이 있어야 경우 개별 원시 FromScratch - 증분 쌍마다 항상 같은 결과를 제공, 후 그들로부터 내장 된 큰 복합 기능도 자동으로 동일한 결과를 제공해야합니다.
질문 : FromScratch 기능과 그 증분 기능을 모두 지원하고 효율성을 위해 협력하며 큰 흐름으로 구성 할 수있는 시스템 / 아키텍처 / 패러다임 / 메타 알고리즘을 사용할 수 있습니까? 그렇지 않다면 왜? 누군가가이 패러다임을 이미 연구하고 출판했다면, 무엇이 무엇이며 어떻게 작동하는지에 대한 간단한 요약을 얻을 수 있습니까?