Reference articles on history, science, culture and more
Encyclopedia

Ruzzo-Tompa algorithm

The Ruzzo-Tompa algorithm or the RT algorithm is a linear-time algorithm for finding all non-overlapping, contiguous, maximal scoring subsequences in a sequence of real numbers. The Ruzzo-Tompa algorithm was proposed by Walter L. Ruzzo and Martin Tompa. This algorithm is an improvement over previously known quadratic time algorithms. The maximum scoring subsequence from the set produced by the algorithm is also a solution to the maximum subarray problem.

The Ruzzo-Tompa algorithm has applications in bioinformatics, web scraping, and information retrieval.

01Applications

Bioinformatics

The Ruzzo-Tompa algorithm has been used in Bioinformatics tools to study biological data. The problem of finding disjoint maximal subsequences is of practical importance in the analysis of DNA. Maximal subsequences algorithms have been used in the identification of transmembrane segments and the evaluation of sequence homology.

The algorithm is used in sequence alignment which is used as a method of identifying similar DNA, RNA, or protein sequences. Accounting for the ordering of pairs of high-scoring subsequences in two sequences creates better sequence alignments. This is because the biological model suggests that separate high-scoring subsequence pairs arise from insertions or deletions within a matching region. Requiring consistent ordering of high-scoring subsequence pairs increases their statistical significance.

Web scraping

The Ruzzo-Tompa algorithm is used in Web scraping to extract information from web pages. Pasternack and Roth proposed a method for extracting important blocks of text from HTML documents. The web pages are first tokenized and the score for each token is found using local, token-level classifiers. A modified version of the Ruzzo-Tompa algorithm is then used to find the k highest-valued subsequences of tokens. These subsequences are then used as predictions of important blocks of text in the article.

Information retrieval

The Ruzzo-Tompa algorithm has been used in Information retrieval search algorithms. Liang et al. proposed a data fusion method to combine the search results of several microblog search algorithms. In their method, the Ruzzo-Tompa algorithm is used to detect bursts of information.

02Problem definition

The problem of finding all maximal subsequences is defined as follows: Given a list of real numbered scores x_{1},x_{2},\ldots ,x_{n}, find the list of contiguous subsequences that gives the greatest total score, where the score of each subsequence S_{i,j}=\sum _{i\leq k\leq j}x_{k}. The subsequences must be disjoint (non-overlapping) and have a positive score.

03Other algorithms

There are several approaches to solving the all maximal scoring subsequences problem. A natural approach is to use existing, linear time algorithms to find the maximum subsequence (see maximum subarray problem) and then recursively find the maximal subsequences to the left and right of the maximum subsequence. The analysis of this algorithm is similar to that of Quicksort: The maximum subsequence could be small in comparison to the rest of sequence, leading to a running time of O(n^{2}) in the worst case.

04Algorithm

The standard implementation of the Ruzzo-Tompa algorithm runs in O(n) time and uses O(n) space, where n is the length of the list of scores. The algorithm uses dynamic programming to progressively build the final solution by incrementally solving progressively larger subsets of the problem. The description of the algorithm provided by Ruzzo and Tompa is as follows:

Read the scores left to right and maintain the cumulative sum of the scores read. Maintain an ordered list I_{1},I_{2},\ldots ,I_{j} of disjoint subsequences. For each subsequence I_{j}, record the cumulative total L_{j} of all scores up to but not including the leftmost score of I_{j}, and the total R_{j} up to and including the rightmost score of I_{j}.
The lists are initially empty. Scores are read from left to right and are processed as follows. Nonpositive scores require no special processing, so the next score is read. A positive score is incorporated into a new sub-sequence I_{k} of length one that is then integrated into the list by the following process:
  1. The list I is searched from right to left for the maximum value of j satisfying L_{j}<L_{k}
  2. If there is no such j, then add I_{k} to the end of the list.
  3. If there is such a j, and R_{j}\geq R_{k}, then add I_{k} to the end of the list.
  4. Otherwise (i.e., there is such a j, but R_{j}<R_{k}), extend the subsequence I_{k} to the left to encompass everything up to and including the leftmost score in I_{j}. Delete subsequences I_{j},I_{j}+1,\ldots ,I_{k}-1 from the list, and append I_{k} to the end of the list. Reconsider the newly extended subsequence I_{k} (now renumbered I_{j}) as in step 1.
Once the end of the input is reached, all subsequences remaining on the list I are maximal.

The following Python code implements the Ruzzo-Tompa algorithm:

def ruzzo_tompa(scores): """Ruzzo-Tompa algorithm.""" k = 0 total = 0 # Allocating arrays of size n I, L, R, Lidx = [[0] * len(scores) for _ in range(4)] for i, s in enumerate(scores): total += s if s > 0: # store I[k] by (start,end) indices of scores I[k] = (i, i + 1) Lidx[k] = i L[k] = total - s R[k] = total while True: maxj = None for j in range(k - 1, -1, -1): if L[j] < L[k]: maxj = j break if maxj is not None and R[maxj] < R[k]: I[maxj] = (Lidx[maxj], i + 1) R[maxj] = total k = maxj else: k += 1 break # Getting maximal subsequences using stored indices return [scores[I[l][0] : I[l][1]] for l in range(k)]
Watch videos about Ruzzo-Tompa algorithmExplainers and documentaries on YouTube (opens in a new tab)

Sources and credits

This article is adapted from the Wikipedia article Ruzzo-Tompa algorithm, written by its contributors and licensed under CC BY-SA 4.0. Fathomly has changed the layout, removed citation markers, navigation and maintenance notices, and adjusted punctuation. This adapted version is shared under the same license. For references, see the original article.

Fathomly is not affiliated with or endorsed by the Wikimedia Foundation. Spotted a problem? Tell us.