Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Техника, которая переплетает различные вычисления
Technique that interweaves different computations
Доветейлинг, в разработке алгоритмов, — это техника, переплетающая различные вычисления, выполняемые, по сути, одновременно. Алгоритмы, использующие доветейлинг, иногда называют доветейлерами.
Dovetailing, in algorithm design, is a technique that interweaves different computations, performing them essentially simultaneously. Algorithms that use dovetailing are sometimes referred to as dovetailers.
Примеры
Рассмотрим дерево, которое потенциально содержит путь бесконечной длины (но каждый узел имеет лишь конечное число потомков): если в этой среде выполнить поиск в глубину, поиск может уйти по бесконечному пути и никогда не вернуться, потенциально оставив часть дерева неисследованной. Однако, если использовать поиск в ширину, существование бесконечного пути перестает быть проблемой: каждый узел посещается последовательно по уровням, в соответствии с его расстоянием от корня, поэтому бесконечный путь повлияет лишь на часть поиска, идущую по этому пути. Мы можем рассматривать это дерево как аналогию коллекции программ; в этом случае подход поиска в глубину соответствует запуску программ поочередно, переходу к следующей только после завершения текущей. Если одна из программ выполняется бесконечно долго, этот переход никогда не произойдет. Подход поиска в ширину, при котором каждый потомок на одном уровне дерева посещается по очереди, является примером переплетения (dovetailing), когда для каждой программы выполняется один шаг, прежде чем перейти к следующей. Таким образом, прогресс достигается в каждой программе, независимо от возможного существования программы, не завершающей свое выполнение. Другой пример – моделирование недетерминированной машины Тьюринга M детерминированной машиной (например, универсальной машиной Тьюринга). В этом случае необходимо использовать переплетение, если одна из ветвей вычислений M содержит бесконечный цикл.
Consider a tree that potentially contains a path of infinite length (but each node has only finitely many children): if a depth first search is performed in this environment, the search may move down an infinite path and never return, potentially leaving part of the tree unexplored. However, if a breadth first search is used, the existence of an infinite path is no longer a problem: each node is visited in a branching manner according to its distance from the root, so an infinite path will only impact the part of the search travelling down that path. We can regard this tree as analogous to a collection of programs; in this case, the depth first approach corresponds to running one program at a time, moving to the next only when the current program has finished running. In the case where one of the programs runs for an infinite amount of time, this transition will never happen. The breadth first approach of visiting each child on the same level of the tree is an instance of dovetailing, where a single step is performed for every program before moving to the next. Thus, progress is made in each program, regardless of the potential existence of a non terminating program. Another example is simulating a non deterministic Turing machine M by a deterministic one (e. g. by a universal Turing machine). In such case, we need to use dovetailing in case one of the computation branches of M contains an infinite loop.
Бесконечно много одновременных вычислений
В случае бесконечного числа программ, все потенциально бесконечно длинные, ни поиск в ширину, ни поиск в глубину не были бы достаточны для обеспечения прогресса по всем программам. Вместо этого можно использовать следующий подход: выполнить первый шаг первой программы; затем выполнить второй шаг первой программы и первый шаг второй программы; затем выполнить третий шаг первой программы, второй шаг второй программы и первый шаг третьей программы и так далее. Этот метод также известен как диагонализация (как, например, используется в пакете "universe" языка Haskell или монаде "Omega").
In the case of an infinite number of programs, all potentially infinitely long, neither the breadth first nor depth first would be sufficient to ensure progress on all programs. Instead, the following technique can be used: perform the first step of the first program; next, perform the second step of the first program and first step of the second program; next, perform the third step of the first program, second step of the second program and first step of the third program; and so on. This is thus also known as diagonalization (as used e. g. in Haskell's "universe" package or "Omega" monad).
Этимология
Аналогия с переплетающимися концами шипового соединения в столярном деле.
An analogy with the interweaving ends of a dovetail joint in woodworking.