# Máxima subsequência crescente

Em ciência da computação, o problema da maior subsequência crescente, ou máxima subsequência crescente consiste em encontrar um subsequência de números, dada um sequência, na qual seus elementos estão ordenados do menor para o maior, e a sequência é a mais longa possível. Este subsequência não é necessariamente contígua, ou o única. Este problema é estudado no contexto das várias disciplinas relacionadas com a matemática, incluindo algoritmo, teoria da matriz aleatória, teoria de representação e física. O problema pode ser resolvido em tempo O(n log n), onde n denota o comprimento da seqüência de entrada.

## Exemplo

Nos 16 primeiros termos da sequência de Van der Corput:
    0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15
um maior subsequência crescente é
    0, 2, 6, 9, 11, 15.
Este subsequência tem tamanho igual a 6, pois a sequência de entrada não contém subsequências de sete elementos ou mais. Porém, esta subsequência não é única e existem outras de mesmo tamanho dentro deste vetor de números. Por exemplo,
    0, 4, 6, 9, 11, 15 ou
    0, 2, 6, 9, 13, 15 ou
    0, 4, 6, 9, 13, 15
são outras subsequências de tamanho igual a 6, na mesma seqüência de entrada.

## Relações com outros problemas

O problema da maior subsequência crescente está intimamente relacionado com o problema maior subsequência comum, que tem uma solução por programação dinâmica em tempo quadrático: a maior subsequência comum de uma seqüência S é a maior subsequência comum de S e T, onde T é o resultado de ordenar S. No entanto, para o caso especial em que a entrada é uma permutação dos inteiros 1, 2, ..., n, esta abordagem pode ser muito mais eficiente, levando a uma complexidade de tempo O(n log log n).
O maior clique em num grafo de permutação é definido pela maior subsequência decrescente da permutação que define o grafo; maior subsequência decrescente é equivalente em complexidade computacional, pela negação de todos os números, ao problema da maior subsequência crescente. Portanto, uma solução para o problema da maior subsequência crescente pode ser utilizada para resolver o problema do clique de forma eficiente na permutação gráficos.
Na correspondência de Robinson–Schensted entre permutações e o diagrama de Young, o comprimento da primeira linha do diagrama correspondente a uma permutação é igual ao comprimento da maior subsequência crescente de permutação, e o comprimento da primeira coluna é igual ao comprimento do maior subsequência decrescente.

## Algoritmos eficientes

O algoritmo descrito abaixo, resolve o problema da maior subsequência crescente de forma eficiente, utilizando matrizes e busca binária. Ele processa a sequência de elementos em ordem, mantendo o maior subsequência encontrada até então. A sequência é indicada de valores de X[0], X[1], etc. Em seguida, após o processamento X[i], o algoritmo terá valores armazenados em duas matrizes:
    M[j] — armazena o índice k de o menor valor de X[k] tal que existe uma subsequência crescente de comprimento j terminando em X[k] no intervalo k ≤ i. Note que j ≤ (i+1), porque j ≥ 1 representa o comprimento de uma subsequência crescente, e k ≥ 0 representa o índice do seu término.
    P[k] — armazena o índice do predecessor de X[k] na maior subsequência terminando em X[k].
Além disso, o algoritmo armazena uma variável L representando o comprimento do maior subsequência encontrada até então. O algoritmo a seguir utiliza uma numeração iniciada em zero, portanto, para esclarecer, M é preenchido com M[0], que não é utilizado, de modo que M[j] corresponde a uma subsequence de comprimento j. Uma implementação real pode ignorar M[0] e ajustar os índices de acordo.
Observe que, em qualquer ponto do algoritmo, a sequência
    X[M[1]], X[M[2]], ..., X[M[L]]
é crescente. Pois, se há uma subsequência crescente de comprimento j ≥ 2, terminando em X[M[j]], então também existe é uma subsequência de comprimento j-1, terminando em um menor valor: ou seja, um valor terminando em X[P[M[j]]]. Assim, podemos fazer uma busca binária nessa sequência, em tempo logarítmo.
O algoritmo, procede da seguinte forma:
Pelo fato do algoritmo executar uma busca binária simples por elementos da sequência, o tempo total da complexidade do algoritmo pode ser expresso usando notação Big-O como O(n log n). Fredman (1975) descreve uma variante deste algoritmo, que credita às Donald Knuth; na variante que ele estuda, o algoritmo testa se a cada valor de X[i] pode ser usado para estender o atual maior aumento da seqüência, a constante de tempo, antes de fazer a pesquisa binária. Com esta modificação, o algoritmo usa no máximo n log$_2$ n − n log$_2$log$_2$ n + O(n) comparações no pior caso, que é óptimo para um algoritmo baseado em comparação com o fator constante O(n).

## Limites de Comprimento

De acordo com o teorema de Erdős–Szekeres, qualquer seqüência de n$^2$+1 números inteiros distintos tem um subsequência crescente ou decrescente de comprimento n + 1. Para entradas em que cada permutação de entrada é igualmente provável, o tamanho esperado da maior subsequência crescente é 2√n.  À medida que n se aproxima do infinito, o limite do comprimento da maior subsequência crescente de uma sequência permutada aleatoriamente contendo n itens tem uma distribuição que se aproxima da distribuição de Tracy–Widom, que é a distribuição do maior autovalor de uma matriz aleatória no conjunto unitário gaussiano.

## Algoritmos Online

O problema da maior subsequência crescente também tem sido estudada na definição de algoritmos online, na qual os elementos de uma seqüência de variáveis aleatórias independentes com distribuição contínua F – ou, em alternativa, os elementos de uma permutação aleatória – são apresentadas uma de cada vez para um algoritmo que deve decidir se deseja incluir ou excluir cada elemento, sem o conhecimento dos elementos. Nesta variante do problema, é possível conceber um procedimento óptimo de seleção que, dada uma amostra aleatória de tamanho n como entrada, irá gerar uma sequência crescente com o tamanho máximo esperado √2n.  O tamanho da subsequência crescente selecionada por este procedimento ideal tem variação de, aproximadamente √2n/3, e a sua distribuição é assintoticamente normal depois que de centralizar e escalar. Os mesmos resultados assimtóticos mantém limites precisos para o problema correspondente, configurando um processo de Poisson. Um refinamento no processo no processo de configuração da Poisson é dada através da prova de um teorema do limite central para a optimização do processo de seleção que detém, com uma adequada normalização, no mais completo sentido do que seria de esperar. A prova produz não apenas o funcional "correto" teorema do limite mas também produz uma matriz de covariância (singular) do processo tridimensional resumindo todos os outros processos de interação.

## Veja também

* Ordenação paciente, uma técnica eficiente para encontrar o comprimento da maior subsequência crescente.
* Monóide Plactico, um sistema algébrico definido por transformações que preservam o comprimento da maior subsequência crescente.
* Anatoly Vershik, um matemático russo que estudou aplicações da teoria dos grupos ao problema da maior subsequência crescente.
* Maior subsequência comum
* Maior subsequência alternada