Markov algorithm
From Wikipedia, the free encyclopedia
A Markov algorithm is a string rewriting system that uses grammar-like rules to operate on strings of symbols. Markov algorithms have been shown to be Turing-complete, which means that they are suitable as a general model of computation and can represent any mathematical expression from its simple notation.
Refal is a programming language based on Markov algorithm.
Contents |
[edit] Algorithm
- Check the Rules in order from top to bottom to see whether any of the strings to the left of the arrow can be found in the Symbol string.
- If none is found, stop executing the Algorithm.
- If one or more is found, replace the leftmost matching text in the Symbol string with the text to the right of the arrow in the first corresponding Rule.
- If the applied rule was a terminating one, stop executing the Algorithm.
- Return to step 1 and carry on.
[edit] Example
The following example shows the basic operation of a Markov algorithm.
[edit] Rules
- "A" -> "apple"
- "B" -> "bag"
- "S" -> "shop"
- "T" -> "the"
- "the shop" -> "my brother"
- "a never used" -> ."terminating rule"
[edit] Symbol string
"I bought a B of As from T S."
[edit] Execution
If the algorithm is applied to the above example, the Symbol string will change in the following manner.
- "I bought a B of apples from T S."
- "I bought a bag of apples from T S."
- "I bought a bag of apples from T shop."
- "I bought a bag of apples from the shop."
- "I bought a bag of apples from my brother."
The algorithm will then terminate.
[edit] Another Example
These rules give a more interesting example. They rewrite binary numbers to their unary counterparts. For example: 101 will be rewritten to a string of 5 consecutive bars.
[edit] Rules
- "|0" -> "0||"
- "1" -> "0|"
- "0" -> ""
[edit] Symbol string
"101"
[edit] Execution
If the algorithm is applied to the above example, it will terminate after the following steps.
- "0|01"
- "00||1"
- "00||0|"
- "00|0|||"
- "000|||||"
- "00|||||"
- "0|||||"
- "|||||"
[edit] References
- Caracciolo di Forino, A. String processing languages and generalized Markov algorithms. In Symbol manipulation languages and techniques, D. G. Bobrow (Ed.), North-Holland Publ. Co., Amsterdam, The Netherlands, 1968, pp. 191-206.
- Andrey Andreevich Markov (1903-1979) 1960. The Theory of Algorithms. American Mathematical Society Translations, series 2, 15, 1-14.