In computing, a one-pass algorithm or single-pass algorithm is a streaming algorithm which reads its input exactly once. It does so by processing items in order, without unbounded buffering; it reads a block into an input buffer, processes it, and moves the result into an output buffer for each step in the process. A one-pass algorithm generally requires O(n) (see 'big O' notation) time and less than O(n) storage (typically O(1)), where n is the size of the input. An example of a one-pass algorithm is the Sondik partially observable Markov decision process.
Example problems solvable by one-pass algorithms
edit
Given any list as an input:
- Count the number of elements.
Given a list of numbers:
Given a list of symbols from an alphabet of k symbols, given in advance.
- Count the number of times each symbol appears in the input.
- Find the most or least frequent elements.
- Sort the list according to some order on the symbols (possible since the and after number of symbols is limited).
- Find the maximum gap between two appearances of a given symbol.
Example problems not solvable by one-pass algorithms
edit
Given any list as an input:
- Find the nth element from the end (or report that the list has fewer than n elements).
- Find the middle element of the list. However, this is solvable with two passes: Pass 1 counts the elements and pass 2 picks out the middle one.
Given a list of numbers:
- Find the median.
- Find the modes (This is not the same as finding the most frequent symbol from a limited alphabet).
- Sort the list.
- Count the number of items greater than or less than the mean. However, this can be done in constant memory with two passes: Pass 1 finds the average and pass 2 does the counting.
The two-pass algorithms above are still streaming algorithms but not one-pass algorithms.
<a href=\"./One-pass_algorithm#cite_note-eds-3\" id=\"mwTA\"><span class=\"mw-reflink-text\" id=\"mwTQ\"><span class=\"cite-bracket\" id=\"mwTg\">[</span>3<span class=\"cite-bracket\" id=\"mwTw\">]</span></span></a></sup>\n<sup about=\"#mwt13\" class=\"mw-ref reference\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" id=\"mwUA\" data-mw='{\"name\":\"ref\",\"attrs\":{\"name\":\"frankfurt\"},\"body\":{\"id\":\"mw-reference-text-cite_note-frankfurt-1\"}}'><a href=\"./One-pass_algorithm#cite_note-frankfurt-1\" id=\"mwUQ\"><span class=\"mw-reflink-text\" id=\"mwUg\"><span class=\"cite-bracket\" id=\"mwUw\">[</span>1<span class=\"cite-bracket\" id=\"mwVA\">]</span></span></a></sup>\n<sup about=\"#mwt16\" class=\"mw-ref reference\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" id=\"mwVQ\" data-mw='{\"name\":\"ref\",\"attrs\":{\"name\":\"sjsu\"},\"body\":{\"id\":\"mw-reference-text-cite_note-sjsu-2\"}}'><a href=\"./One-pass_algorithm#cite_note-sjsu-2\" id=\"mwVg\"><span class=\"mw-reflink-text\" id=\"mwVw\"><span class=\"cite-bracket\" id=\"mwWA\">[</span>2<span class=\"cite-bracket\" id=\"mwWQ\">]</span></span></a></sup>\n<sup about=\"#mwt19\" class=\"mw-ref reference\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" id=\"mwWg\" data-mw='{\"name\":\"ref\",\"attrs\":{\"name\":\"pomdp\"},\"body\":{\"id\":\"mw-reference-text-cite_note-pomdp-4\"}}'><a href=\"./One-pass_algorithm#cite_note-pomdp-4\" id=\"mwWw\"><span class=\"mw-reflink-text\" id=\"mwXA\"><span class=\"cite-bracket\" id=\"mwXQ\">[</span>4<span class=\"cite-bracket\" id=\"mwXg\">]</span></span></a></sup>\n"}}'>
- ↑ Schweikardt, Nicole. "One-Pass Algorithm" (PDF). Retrieved 2021-07-01.
- ↑ "Sondik's One-Pass Algorithm". www.pomdp.org.