Quais algoritmos são usados ​​com mais frequência na prática?

19

Quais algoritmos são usados ​​com mais frequência?

Escreva um único algoritmo por resposta, tente manter sua resposta curta (uma ou duas linhas).

Kaveh
fonte
Kaveh, talvez você deva esperar por respostas antes de fornecer tantas? :)
Suresh Venkat
11
@ Suresh: Desculpe. :)
Kaveh
3
Com maior frequência em que sentido? (Número de programas de computador diferentes que implementam o algoritmo? Número de partes de software instaladas que usam o algoritmo? Número de execuções do algoritmo? Quantidade de dados processados ​​usando o algoritmo? Segundos da CPU usados ​​pelo algoritmo?) Onde? (Academia, indústria, PCs domésticos?) É sempre possível estimar algo assim; podemos ter algum dado para apoiar alguma das respostas?
Jukka Suomela
11
A pergunta é muito vaga, como Jukka Suomela apontou. Sem maiores esclarecimentos, as respostas não serão melhores que o índice de um livro sobre algoritmos.
Tsuyoshi Ito
11
Há um livro recente: "Nove algoritmos que mudaram o futuro: as idéias engenhosas que dirigem os computadores de hoje", de John MacCormick. Veja press.princeton.edu/titles/9528.html
Alessandro Jacopson

Respostas:

18

A transformação rápida de Fourier é o problema algorítmico resolvido na maioria das vezes por dia por sistemas de computador reais? Tem que estar perto. Então, eu nomearia o algoritmo Cooley-Tukey FFT .

Aaron Sterling
fonte
Gosto disso, a FFT é negligenciada no ensino básico de ciência da computação, mas certamente é um algoritmo com um tremendo impacto em nossa sociedade moderna, e muitas coisas modernas ao nosso redor estão analisando a FFT o tempo todo.
Jukka Suomela
14

Multiplicação.

Talvez um dos algoritmos não inteiramente triviais mais antigos e um problema resolvido com mais frequência do que a FFT.

Jukka Suomela
fonte
A multiplicação não é um algoritmo, é um problema com muitos subproblemas resolvidos por diferentes algoritmos: número inteiro de tamanho fixo e ponto flutuante, executados por hardware ou software; bignums de tamanho variável (módulo ou não), matrizes, ...
Gilles 'SO- stop be evil'
Eu estava me referindo aos circuitos de multiplicação de hardware em CPUs modernas (para números inteiros e de ponto flutuante; esses dois não são tão diferentes no final). Meu entendimento é que eles tendem a ser "apenas" versões engenhosamente projetadas da mesma abordagem básica - o algoritmo "longa multiplicação", que já era conhecido na Idade Média.
Jukka Suomela
Penso que a subtração (comparação) é usada com muito mais frequência do que a multiplicação, e não vejo nenhum motivo para a multiplicação contar como algoritmo e a adição / subtração não. No entanto, não sei se isso se qualifica como resposta.
Tsuyoshi Ito
Sim, adição e subtração são usadas ainda mais frequentemente do que multiplicação - de fato, o algoritmo de multiplicação longa reduz essencialmente uma multiplicação a uma adição. No entanto, não sei se existe um único algoritmo de adição / subtração que poderíamos nomear aqui?
Jukka Suomela
@JukkaSuomela: A adição e subtração de dois suplementos seria um bom candidato.
John Gietzen
13

Algoritmos de caminho mais curto de Dijkstra e Bellman-Ford . Existem pelo menos 35.000 sistemas autônomos (AS) ativos na Internet a partir de 2010. Cada AS está executando um protocolo de roteamento de estado de link (Dijkstra) ou um protocolo de roteamento de vetor de distância (Bellman-Ford). Os roteadores em um AS normalmente atualizam suas tabelas periodicamente a cada poucos minutos, digamos 10.

Assim, o número de execuções de Dijkstra e Bellman-Ford por dia é de pelo menos 5 milhões. E isso é apenas dos roteadores.

Não contamos os cálculos de caminho mais curto do Google Maps e os gostos que devem ser responsáveis ​​por 10 vezes mais. Meio bilhão de execuções por dia não é exagero.

Hung Q. Ngo
fonte
Meio bilhão de execuções por dia pode parecer muito, mas lembre-se de que temos, por exemplo, bilhões de telefones celulares neste planeta. O que essas coisas estão fazendo o tempo todo? Ou o que eles estão fazendo durante cada telefonema? Não sei, mas meu palpite é que eles estão fazendo muito menos FFT do que caminhos mais curtos.
Jukka Suomela
8

Ordenação rápida

Kaveh
fonte
14
A propósito, é realmente verdade que quicksort é o algoritmo de classificação mais usado no mundo real? Eu dei uma olhada rápida na implementação de uma função de "classificação" de uso geral em algumas linguagens de programação comumente usadas. Perl: parece ter mudado de quicksort para mergesort recentemente. Python: usa Timsort (híbrido de classificação por inserção / inserção). Java: costumava ser mesclado, atualmente Timsort. Bancos de dados tendem a usar classificação externa. O quicksort já é uma espécie em extinção?
Jukka Suomela
Eu acho que esse é um ponto muito bom. Seria ótimo se alguém pudesse editar a resposta.
Juan Bermejo Vega
@ Juan, embora o ponto mencionado por Jukka esteja correto, não vejo motivo para editar a resposta.
Kaveh
7

Eu acho que o algoritmo mais usado é o Parity Check (ou talvez o CRC ou algum tipo de código de correção de erros), porque eles aparecem em todos os acessos à RAM.

Diego de Estrada
fonte
Também é usado pelo menos uma vez para cada pacote a ser enviado através de qualquer rede baseada em IP
Claus Broch
5

Algoritmo Simplex - isso ainda não é competitivo com os melhores métodos de pontos interiores? Nesse caso, tem que ser muito utilizado.

Mugizi Rwebangira
fonte
4

k

De maneira mais geral, você deve considerar os ganhadores do prêmio Kanellakis em busca de idéias que tenham peso teórico e prático.

Suresh Venkat
fonte
obrigado pelo link, parece muito interessante. A motivação parcial para a pergunta foi encontrar um bom nome algorítmico atraente para o site. :)
Kaveh
4

Correspondência de expressão regular por conversão para autômatos finitos - acredito que grep funcione nessas linhas.

Neeldhara
fonte
3

É difícil pensar em algoritmos mais amplamente utilizados do que aqueles nas implementações modernas do TCP : ou seja , evitar congestionamentos , retransmitir rapidamente . Embora isso dependa de como se determina o que atende aos critérios de um algoritmo ...

Lev Reyzin
fonte
Mas você realmente pode usar algoritmos TCP com mais frequência que o FFT (que já está nesta lista)? Se meu computador envia um único pacote IP (TCP ou não), ele normalmente não aciona vários cálculos de FFT? Geralmente os pacotes são transmitidos em algum momento usando tecnologias como WLAN, ADSL e GSM, e acho que a maioria deles usa modulações que dependem muito da FFT.
Jukka Suomela
Eu acho que você está certo.
Lev Reyzin
3

Eliminação Gaussiana Isso ainda é usado na prática, certo? Caso contrário, substitua pelo que for usado com mais frequência para resolver sistemas lineares ...

Mugizi Rwebangira
fonte
2

SHA-1 (e funções de hash em geral). Provavelmente vença a maioria dos outros algoritmos em termos de número de execuções.

Hung Q. Ngo
fonte
2

Algoritmos relacionados à árvore B + são usados ​​para os materiais do banco de dados

Prabu
fonte
2

Algoritmos de agendamento. Eles são usados ​​por todos os dispositivos e servidores de usuários em todo o mundo. Várias variações estão sendo usadas. Encontrei muitas referências para "fila de feedback multinível"

chazisop
fonte
1

Essa resposta interpreta "com mais frequência" em termos de ciclos reais da CPU.

Quando eu estava aprendendo computação nos anos 70, lembro-me de ler que a grande maioria dos ciclos de computadores (leia-se: mainframe) eram dedicados à classificação. Os aplicativos de negócios exigem uma ampla classificação para análise e geração de relatórios. Não imagino que isso tenha mudado muito, mas é claro que o surgimento de outros aplicativos - e-mail, processamento de texto etc. - deve ter alterado o mix. Essas classificações geralmente são estáveis ​​(não o Quicksort) devido à necessidade de classificar sucessões de campos para criar sub-classificações.

Estritamente falando, porém, o algoritmo usado com mais freqüência é, sem dúvida, o que for executado pelo processo de espera do sistema Windows quando nada mais estiver acontecendo ;-).

whuber
fonte
1

Vetor de matriz de Sprase Multiply

... é o cavalo de batalha computacional por trás da solução de quase todos os sistemas lineares. Como resultado, ele está sendo executado sempre que

  • Cientistas / engenheiros resolvem equações diferenciais
  • Estatísticos encontram novas correlações (PCA)
  • Google executa pagerank
  • Seu telefone prevê sua localização a partir de GPS, acelerômetros, locais de torre de celular
  • Seu carro ajusta sua suspensão em movimento
  • etc ....

A maioria dos FLOPs em qualquer supercomputador ou cluster é gasta dentro de um mat-vec esparso.

MRocklin
fonte
1

Método de Newton. É usado para calcular raízes quadradas, para divisão de computação. Pode ser usado para fazer programação linear. Mais geralmente, é o cavalo de batalha da otimização (convexa). Ele pode ser usado para resolver equações diferenciais em Física, minimizando a ação / energia.

Jules
fonte
1

Hashing e vermelho-preto árvores.

Eles já estão implementados no STL (hash_map, map), e todo programador sabe que esse contêiner é incrivelmente conveniente sempre que você deseja armazenar algumas informações indexadas por um tipo de dados arbitrário.

zotachidil
fonte
0

Programação Dinâmica .

Eu acho que o DP é usado "com mais frequência" do que outros algoritmos citados na pesquisa até agora. Eu deduzo "com mais frequência" no sentido de quantas vezes um conceito de algoritmo não trivial foi implementado pelo programador na vida real, e não por quanto tempo uma implementação específica de um algoritmo é invocada.

O DP é versátil e tem muitas faces. Às vezes, eu o usava um pouco subconscientemente e depois percebi que estava fazendo DP.

Obviamente, existem coisas que são ainda mais comuns que o Dynamic Program, mas na maior parte são estruturas de dados (matriz, lista vinculada, hash).

Hardy Leung
fonte
7
Isso é um pouco diferente das outras sugestões, pois é um paradigma de design de algoritmo (semelhante a ganancioso ou dual-primal) e não apenas um algoritmo único.
Jukka Suomela
0

Correspondência de cadeias, usada o tempo todo no software aplicativo e no nível do banco de dados.

No caso exato, existem vários algoritmos bastante envolvidos (KMP, Boyer-Moore), com alguns que atingem o tempo de execução esperado sublinear. Eles também são interessantes para estudar do ponto de vista do CS.

A correspondência aproximada de cadeias, ou seja, alinhamentos, é provavelmente ainda mais interessante. Você conhece os recursos de "correção automática"? Além disso, as pesquisas em dados de seqüência ruidosa (por exemplo, DNA) são feitas usando alinhamentos.

Rafael
fonte