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, 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 .


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.


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.


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

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.


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



4

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



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 ...


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


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.


2

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


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"


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 ;-).


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.


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.


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.



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).


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.