Quais são os algoritmos significativos para a humanidade nas últimas décadas? [fechadas]


40

Quais algoritmos mais importantes do mundo contribuíram mais para a humanidade nas últimas décadas?

Eu pensei que este é um bom conhecimento geral para um desenvolvedor conhecer.

Atualização:
Se possível, mantenha a resposta para um algoritmo de programação específico .
Gostaria de obter uma lista dos mais importantes, apenas um algoritmo por resposta.
Por favor, considere indicar por que o algoritmo é significativo e importante ...


2
Está sendo fechado porque (até agora) quatro pessoas consideram "não uma pergunta real", provavelmente porque não temos nenhuma idéia real do que, isoladamente, é um importante algoritmo de programação.
— David Thornley

2
Pode ser fora de tópico, mas é uma pergunta real.
— 19410 Jeremy

11
+1 boa pergunta. Sugiro perguntar novamente em cstheory.stackexchange.com #
— Aleksandr Levchuk

11
Por que você responde suas próprias perguntas? Várias vezes?

2
Nenhuma resposta errada + número ilimitado de respostas + um comentário inequívoco pedindo "uma por resposta" + o autor publica várias de suas próprias respostas = caso do livro didático de uma pergunta não construtiva. Eu sei que é velho, mas vamos fechar isso.
— Aaronaught 27/05

Respostas:


59

A criptografia de chave pública / privada é muito importante. O comércio na Internet não seria tão onipresente sem ele.


4
+1 e para adicionar à sua resposta, RSA.
— sange

Há todo um grupo de algoritmos e práticas recomendadas envolvidos na transformação de códigos criptográficos (como o RSA) em soluções práticas.
— Donal Fellows

37

Algoritmo de Dijkstra

O algoritmo existe em todos os roteadores do mundo, para identificar a melhor rota entre dois nós em uma rede.


Você tem certeza? A maioria dos roteadores sabe que o número IP pertence a ele e o encaminha para a máquina na rede local, ou conhece um roteador que conhece melhor - o roteador padrão - e nesse caso o pacote vai para esse roteador. Os grandes roteadores podem saber que, para o intervalo de endereços IP X1-Y1, o pacote deve ir para o roteador R1, para o intervalo X2-Y2, o pacote deve ir para o roteador R2, etc. Não há algoritmo Dijkstras envolvido nisso.

2
@ Thorbjørn Ravn Andersen: Mas, para o roteador saber essa informação, alguém em algum momento teria que usar o algoritmo de Dijkstra. Sim, não é usado para rotear cada pacote individual, mas é usado para determinar tabelas de roteamento em grandes redes. +1.
— quer

@ Billy, onde exatamente você esperaria que o algoritmo Dijkstra seja realmente usado e por quem?

@ Thorbjørn Ravn Andersen: Na minha opinião, ele desempenha um papel no OSPF, que é a base da escolha das rotas corretas para redes pequenas. As conexões entre redes maiores usam o BGP, que é mais baseado em políticas. Não tenho certeza se o BGP usa o algoritmo de Dijkstra ou não.
— Billy ONeal

3
@ Billy, mas minha objeção era "existe em TODOS OS roteadores do mundo". Isso é - na minha opinião - claramente errado.

30

Transformada rápida de Fourier (FFT)

O FFT é um método extremamente importante e amplamente utilizado para extrair informações úteis de sinais amostrados .

Uma transformada rápida de Fourier (FFT) é um algoritmo eficiente para calcular a transformada discreta de Fourier (DFT) e sua inversa.


4
Eu já tinha um chefe que, décadas antes, havia escrito uma série de funções da FFT para o PDP-11. Ele vendeu um baralho de cartões perfurados com essas funções com um anúncio na parte de trás da Popular Science e fez um banco bastante sério. Evidentemente, ele tinha pessoas usando seu código para tudo, desde processamento de sinais até previsão do mercado de ações.
— Dan Ray

26

Ranking da página

PageRank é um algoritmo de análise de links, nomeado em homenagem a Larry Page, usado pelo mecanismo de busca na Internet do Google que atribui uma ponderação numérica a cada elemento de um conjunto de documentos com hiperlink, como a World Wide Web, com o objetivo de "medir" seus parentes importância dentro do conjunto.


haha, nossas respostas eram apenas 2 segundos de diferença, desculpe :)
— Maksee

não há problema algum! :)
— Amir Rezaei

36
Eu nunca percebi que ele recebeu o nome de Larry Page. Sempre presumi que o nome tivesse algo a ver com páginas da Web.
— JohnFx

11
@JohnFx Whoa, sem brincadeira!
— Mark C

+1: mas pode se qualificar se o algoritmo real não for conhecido pela humanidade? (IIRC wikipedia do é uma aproximação)
— Steven Evers

22

Algoritmos de compactação de dados

Na ciência da computação e na teoria da informação, a compactação de dados ou a codificação da fonte é o processo de codificar informações usando menos bits (ou outras unidades portadoras de informações) do que uma representação não codificada usaria, através do uso de esquemas de codificação específicos.


2
Exatamente e acho que o algoritmo básico de compressão LZW pode ser considerado um dos algoritmos mais bonitos da engenharia de software.
— Mjuba

"se possível, forneça o nome do algoritmo específico"

14

Smith-Waterman (e Needleman-Wunsch)

Isso pode ser muito buscado, por favor, comente.

Smith-Waterman: O Algoritmo de Alinhamento de Sequência

Penso que um desses exemplos são os algoritmos de Smith-Waterman e Needleman-Wunsch e suas aproximações. Todos eles estão essencialmente fazendo a mesma coisa: alinham duas ou mais seqüências de caracteres . Há um significado na biologia. Quando as seqüências de DNA ou proteína são alinhadas - regiões de similaridade estrutural, funcional e evolutiva são reveladas.

BLAST como descendente de Smith-Waterman

Uma heurística que se aproxima de Smith-Waterman é BLAST. Permite pesquisar sequências de grandes bancos de dados quanto à similaridade biológica. A popularidade do BLAST é realmente grande - é muito provavelmente o algoritmo mais usado em Biologia. As áreas mais recentes de Bioinformática e Genômica têm aproximações melhores e mais novas dos algoritmos Smith-Waterman / Needleman-Wunsch, que são mais precisos que o BLAST.

Assembléia do Genoma como descendente de Smith-Waterman

As aproximações de alto rendimento de Smith-Waterman e Needleman-Wunsch, que são mais rápidas que o BLAST, são usadas para montar os genomas a partir do sequenciamento de espingarda - onde o produto da máquina sequenciadora é uma quantidade enorme de leituras de DNA (bilhões) de partes arbitrárias do genoma. muito curto (50 a 100 nucleotídeos). A abordagem foi usada para concluir o Projeto Genoma Humano. Todo o seqüenciamento moderno é feito dessa maneira.

Alinhamento de Seqüências Múltiplas uma extensão de Smith-Waterman

Existem numerosos algoritmos de alinhamento de múltiplas seqüências - eles estão se aproximando de uma versão de várias seqüências do Smith-Waterman / Needleman-Wunsch. Várias sequências são alinhadas como um grupo simultaneamente entre si. É um problema muito mais difícil do que o equivalente aos pares, mas as soluções fornecem muito mais informações sobre a função biológica, a estrutura e a história evolutiva das seqüências relacionadas.


Olá e bem-vindo aos programadores! Convém dividir esta resposta em uma para cada um dos algoritmos que você está apresentando aqui, conforme é habitual para perguntas da lista como essa para facilitar a votação e a classificação.
— Yi Jiang

@Yi Jiang: Meu panteão! Eu interpretei seu comentário como "facilitar o vômito". : - /
— Dr. Hannibal Lecter

Aqui defendo apenas um algoritmo - Smith-Waterman (e sua variante Needleman-Wunsch) #
— Aleksandr Levchuk

13

Siam nomeou os seguintes como os algoritmos mais importantes do século XX:

1946: O algoritmo da metrópole para Monte Carlo . Através do uso de processos aleatórios, esse algoritmo oferece uma maneira eficiente de encontrar respostas para problemas que são muito complicados para resolver exatamente.

1947: Método Simplex para Programação Linear . Uma solução elegante para um problema comum no planejamento e tomada de decisão.

1950: Método de Iteração do Subespaço de Krylov . Uma técnica para resolver rapidamente as equações lineares que abundam na computação científica.

1951: A Abordagem Decompositiva para Computações Matrix . Um conjunto de técnicas para álgebra linear numérica.

1957: O Fortran Optimizing Compiler . Transforma código de alto nível em código legível por computador eficiente.

1959: Algoritmo QR para computação de autovalores . Outra operação crucial da matriz tornada rápida e prática.

1962: Algoritmos de classificação rápida para classificação . Para o manuseio eficiente de grandes bancos de dados.

1965: Transformação rápida de Fourier . Talvez o algoritmo mais onipresente em uso hoje em dia, quebre formas de onda (como som) em componentes periódicos.

1977: Detecção de relação de número inteiro . Um método rápido para identificar equações simples satisfeitas por coleções de números aparentemente não relacionados.

1987: Método Multipolar Rápido . Uma inovação ao lidar com a complexidade dos cálculos de n corpos, aplicada em problemas que vão da mecânica celeste à dobragem de proteínas.

Pessoalmente, eu substituiria a Integer Relation Detection pelo PageRank .


11
A essa lista, acrescentaria 2 livros, embora fossem mais sobre os "teoremas mais importantes" do século XX: Cinco Regras de Ouro amazon.com/Five-Golden-Rules-20th-Century-Mathematics/dp/… , e Mais cinco regras de ouro. amazon.com/Five-More-Golden-Rules-20th-Century/dp/0471395285
— Tangurena

As técnicas de Monte Carlo ainda são utilizadas, mais ou menos na forma original. Isso também se aplica à FFT e à Quicksort. A maioria do resto simplesmente não estou familiarizada. O método Simplex para LP não é bem dimensionado, comparado aos métodos mais modernos.
— David Thornley

9

PageRank, ame ou odeie, mas afeta as decisões e ações de milhões de pessoas no mundo todo pesquisando diariamente no Google.


9

Se eu tivesse que listar os três principais algoritmos mais importantes em uso hoje em computadores, eu diria:

  1. Pesquisa binária
  2. Ordenação rápida
  3. Algoritmo de Dijkstra

O algoritmo de busca binária é usado constantemente para restringir um item em uma lista classificada, a maioria das pesquisas de índice usará algo nesse sentido em algum momento. Esse algoritmo fornece uma pesquisa de uma lista ordenada em o (log n).

O algoritmo Quicksort finalmente conseguiu classificar para O (n log n) caso médio e O (n ^ 2) caso pior. A classificação é uma das tarefas de dados mais comuns em um computador e uma das mais caras, pois melhorar a classificação média de casos foi um grande avanço em termos de eficiência.

O algoritmo de Dijkstra, como já foi dito, produz um caminho mais curto entre os pontos dentro de um gráfico. Isso é amplamente utilizado para todos os tipos de aplicativos de roteamento, mais amplamente em relação à própria Internet, garantindo que o caminho mais rápido através da rede emaranhada de roteadores interconectados seja usado.


A pesquisa binária teria que ser muito, muito antiga ... Quero dizer, foi formulada 'no passado' e foi em uma 'década', mas já existia há centenas de anos.
— Kirk Broadhurst

@Kirk Broadhurst: Ainda assim, é um algoritmo incrivelmente importante para computadores. Independentemente de quando um humano o concebeu pela primeira vez.
— Orbling

8

Teorema de Bayes

Provavelmente, contribuiu mais para manter a quantidade de spam que desperdiçou tempo na minha caixa de entrada em um nível gerenciável.

É claro que sou usado em várias outras aplicações que valem a pena, mas matar SPAM é o meu favorito.


Eu desistiria de você, mas esse é um teorema (um dos melhores) e não um algoritmo. No entanto, muitos algoritmos são baseados nesse teorema.
— Amir Rezaei

Eu estava apenas tentando agrupar todos eles em uma categoria geral de algoritmos, mas tecnicamente você está correto.
— JohnFx

@AmirR Tecnicamente correto, o melhor tipo de correto!
— Mark C

7

TimSort

Este é o algoritmo de classificação agora usado em Python , Java 7 e Android

Basicamente:

  • O (N log N) pior caso (não degenera)
  • O (N) para lista quase classificada (de fato N-1exatamente na lista já classificada)

E a beleza disso? É estável ! E, portanto, adequado para a classificação multipass de acordo com vários critérios.

A propósito, se alguém tiver uma implementação C ++ otimizada disponível ...


Não pode ser Θ (NlogN), pois possui esse melhor comportamento em uma lista já classificada. O (NlogN) é a notação correta aqui.
— Donal Fellows

Embora este seja legal, eu certamente não o chamaria de "um dos maiores algoritmos inventados nas últimas décadas". O mergesort, no qual o Timsort se baseia, é a conquista real.
— Billy ONeal

6

Todos os algoritmos usados ​​para resolver o problema de visibilidade na animação por computador em 3D parecem cruciais para mim.

Algoritmo do pintor

O algoritmo do pintor, também conhecido como preenchimento prioritário, é uma das soluções mais simples para o problema de visibilidade na computação gráfica em 3D. Ao projetar uma cena 3D em um plano 2D, é necessário em algum momento decidir quais polígonos são visíveis e quais estão ocultos.

Z-buffering

Na computação gráfica, o buffer z é o gerenciamento das coordenadas de profundidade da imagem em gráficos tridimensionais (3-D), geralmente feitos em hardware, às vezes em software. É uma solução para o problema de visibilidade, que é o problema de decidir quais elementos de uma cena renderizada são visíveis e quais estão ocultos. O algoritmo do pintor é outra solução comum que, embora menos eficiente, também pode lidar com elementos de cena não opacos. O buffer Z também é conhecido como buffer de profundidade.

Determinação de superfície oculta

Em computação gráfica em 3D, a determinação da superfície oculta (também conhecida como remoção da superfície oculta (HSR), remoção da oclusão (OC) ou determinação da superfície visível (VSD)) é o processo usado para determinar quais superfícies e partes de superfícies não são visíveis de um determinado ponto de vista Um algoritmo de determinação de superfície oculta é uma solução para o problema de visibilidade, que foi um dos primeiros grandes problemas no campo da computação gráfica em 3D. O processo de determinação de superfície oculta é chamado às vezes de oculto e esse algoritmo é chamado de oculto O analógico para a renderização de linhas é a remoção de linhas ocultas. A determinação da superfície oculta é necessária para renderizar uma imagem corretamente, para que não seja possível olhar através das paredes na realidade virtual, por exemplo.


3

Qualquer um que você precise para resolver seu problema atual.


11
Era o que eu ia dizer. Agora eu não tenho que dizer isso.
— Robert Harvey

O que não for uma boa resposta. Quaisquer algoritmos não são significativos para a humanidade.
— Amir Rezaei

6
Este não é um algoritmo específico e, mesmo que fosse, provavelmente não é importante para a humanidade.
— jason

3

Soundex é um algoritmo fonético para indexar nomes por som.


Como a soundex contribuiu para a humanidade?
— Barjak

Melhorou a capacidade de usar linguagem natural, corrigindo pequenas diferenças de ortografia e pronúncia regional.
— Sal

3

Algoritmo de Viterbi

Originalmente usado para decodificar códigos de correção de erros convolucionais, agora é usado para resolver uma ampla classe de problemas de reconhecimento (variando de reconhecimento de fala a bioinformática). Você pode encontrá-lo em vários dispositivos de comunicação e armazenamento.


O algoritmo +1 de Viterbi é muito importante. @ [Giacomo Verticale] talvez você deva mencionar sua relação com os Modelos de Markov Ocultos (HMMs).
— Aleksandr Levchuk 28/11

3

MP3

Embora seja um termo mais geral do que um algoritmo específico, eu mencionaria o MP3 como a agregação dos diferentes algoritmos e técnicas que trabalham em cooperação para gerar esse formato de áudio com perdas.

Certamente foi muito significativo na "era digital".


3

Integração numérica Runge-Kutta . Sem ele, muitas simulações não seriam possíveis. Sem programa espacial, sem energia nuclear, sem balística, sem simulações esportivas, sem coletes à prova de balas, sem simulação de teste de colisão, sem simulação de movimento de fluidos, sem simulações de interação química, sem edifícios resistentes a terremotos ... a lista continua.


+1 @ j172 Eu conheço este, é realmente útil em análises e simulações numéricas.
— Amir Rezaei

2

Algoritmo de classificação.


5
embora isso não seja um algoritmo específico ...
— Justin L.

Sim, o que Justin L. disse, qual algoritmo de classificação?
— dr Hannibal Lecter

O "algoritmo específico" deve ser mesclado, o primeiro dos tipos n lg n.
— Billy ONeal

2
@dr Hannibal Lecter: Bolha, é claro. Tudo o resto é otimização prematura.
— peterchen

2

11
Que nojo! Eu certamente espero que as pessoas não estejam usando o quicksort no código de produção. Mais importante, o mergesort veio mais cedo e é quase tão rápido. (Esperemos que a maioria do código usa alguma variante introsort)
— Billy ONeal

2
@ Billy ONeal, a classificação no .NET é tudo Quicksort. Portanto, qualquer programa que chame List <T> .Sort () usa a classificação rápida na produção.
— Steven Evers

@SnOrfus: Você tem provas dessa afirmação? Para minha compreensão, a lista <t> .Sort é baseada no introsort.
— precisa


3
@ Thorbjørn: Ainda não é um bom algoritmo de uso geral. Introsort é quicksort, mas muda para a classificação de heap se ultrapassar uma profundidade de recursão especificada. Isso permite que você tenha as boas características do quicksort, mas sempre evita os casos patológicos, mesmo que o algoritmo escolha pivôs ruins.
— Billy ONeal

1

Classificação de inserção

Fácil de implementar, muito rápido em pequenas listas e usado nas implementações Merge Sort / Quicksort para agilizá-las. É estável e opera em O (n) em listas classificadas (quando classificadas em ordem crescente).



1

Kalman Filter

Ele é muito usado na navegação e no rastreamento de alvos (para praticamente qualquer sensor: radar, sonar, FLIR, ladar). Um livro mostra um aplicativo em um controlador de unidade de disco. Os sistemas de controle robótico freqüentemente usam filtros Kalman.


0

Linguagem falada e escrita.

Atualmente, eles são um dos algoritmos mais eficientes para transferir conhecimento de uma coisa para outra. Sem linguagem, a sociedade civil não poderia existir e a informação não poderia ser transmitida.


5
-1: os algoritmos podem ser expressos usando a linguagem natural, mas as línguas naturais não são algoritmos.
— precisa

2
Você diria que algoritmos de compressão não são algoritmos então? Tudo o que a linguagem faz é comprimir as informações que são transmitidas de uma fonte para um receptor. Ele possui regras específicas que precisam ser seguidas (gramática), como qualquer outro algoritmo, e recebe uma entrada (suas experiências) e produz uma saída diferente (conhecimento). Não vejo como você não considerava a linguagem um algoritmo.
— Malfist

Ele falha em todas as definições padrão de algoritmo em várias frentes.
— James Reinstate Monica Polk

0

A estrutura de dados do heap e seus algoritmos associados para construção e manutenção de heap.

E mostre algum respeito pelo quicksort. Mesmo que nem sempre seja o tipo de escolha, é um dos algoritmos fundamentais no desenvolvimento histórico da ciência da computação e é um ótimo veículo para entender a recursão e a análise de algoritmos. É lindo, e sim, eu amo isso.


0

Algoritmos de indexação como árvore B, árvore B +, índice de hash, índice de árvore binária etc. Para indexar uma enorme quantidade de dados.


0

MapReduce como uma maneira de dividir, conquistar e paralelizar o processamento de grandes conjuntos de dados.


-1

Algoritmo de força bruta!

Muitas pessoas subestimam esse algoritmo de força bruta. Na verdade, é usado principalmente para resolver problemas sem padrão. Eu amo muito isso!


5
Isso não é um algoritmo. É um tipo de algoritmo.
— Adam Lear

É um método para quebrar a criptografia.
— Amir Rezaei

Eu acho que também é classificado como um algoritmo. "Comece de x para y faça alguma coisa." <--- algoritmo certo?
— xport

Um algoritmo é uma série de etapas para realizar uma tarefa específica . Isso não é específico.
— Anto 25/05

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.