Na ciência da computação de hoje, a eficiência dos algoritmos e o desempenho alcançada não dependem apenas da complexidade computacional teórica, mas também diretamente afetados pelo desempenho real do hardware.Isso é particularmente óbvio, porque muitos algoritmos considerados ideais podem não ter o desempenho tão bom quanto o esperado em aplicativos do mundo real.Com o avanço da tecnologia, vemos uma conexão profunda entre o design de algoritmos e a arquitetura de hardware.Essa correlação levanta uma questão -chave: ao procurar otimização do algoritmo, como o design e o desempenho do hardware devem se adaptar a essa mudança?
Se o algoritmo for progressivamente ideal, significa que, em uma escala de entrada grande o suficiente, nenhum algoritmo pode superar seu desempenho, limitado apenas por um fator constante.
O conceito de algoritmos ideais progressivos é frequentemente visto na ciência da computação e geralmente envolve o desempenho dos algoritmos ao processar grandes entradas.Especificamente, quando o desempenho de um algoritmo é O (f (n)), se seu limite inferior for comprovado como ω (f (n)) para um problema específico, o algoritmo é chamado de Optimal Progressive.Por exemplo, no caso de classificação de comparação, toda a classificação de comparação requer comparações de pelo menos ω (n log n) em cenários médios e de pior caso, enquanto a classificação de mesclagem e a classificação de heap pode ser classificada no tempo de O (n log n) e, portanto, pode ser considerada progressivamente ideal.
No entanto, em muitos casos, existem outros algoritmos com maior eficiência, especialmente quando os dados de entrada têm propriedades específicas.Se N objetos forem conhecidos por serem números inteiros no intervalo [1, n], eles podem ser classificados em O (n), como o uso de classificação do balde.Isso mostra que uma única invariância não deve nos limitar a um determinado algoritmo, porque certas estruturas ou algoritmos de dados específicos podem melhorar bastante o desempenho.
Mesmo um algoritmo ideal progressivo, sem considerar a otimização de hardware, pode não ter desempenho ideal em dados reais.
Para computadores contemporâneos, otimizações de hardware, como cache de memória e processamento paralelo, podem ser "destruídas" por algoritmos progressivamente ótimos.Isso significa que, se sua análise não levar em consideração essas otimizações de hardware, pode haver alguns algoritmos abaixo do ideal que podem utilizar melhor essas características e ir além do algoritmo ideal nos dados do mundo real.Tomando o algoritmo de tempo linear de Bernard Chazelle para a triangulação simples de polígono como exemplo, essa é uma escolha ideal incremental, mas raramente é usada na prática.Além disso, embora as estruturas dinâmicas de dados da matriz possam teoricamente ser indexadas em tempo constante, elas excederão significativamente o desempenho dos índices de matriz comum em muitas máquinas.
Embora a importância dos algoritmos ideais progressivos não possa ser ignorada, sua complexidade às vezes dificulta a aplicação em algumas situações práticas.Se o algoritmo for muito complexo, sua dificuldade em entender e implementação poderá exceder os benefícios potenciais dentro da faixa de tamanhos de entrada considerados.De fato, as entradas que enfrentamos em muitos casos, cujas propriedades fazem outros algoritmos ou heurísticas de alto desempenho, mesmo que o tempo de pior caso não seja bom.
Com base nessas visões, podemos ver que o trade-off entre otimização progressiva e a eficácia do hardware é realmente complexa.Com o avanço da tecnologia, é necessário reavaliar o design do algoritmo para se adaptar melhor ao ambiente de hardware em constante mudança.Se nos concentrarmos apenas na eficiência teórica, podemos perder soluções que tenham mais vantagens em usabilidade, flexibilidade e desempenho.
Ao explorar algoritmos, você também pode pensar: que tipo de design de hardware pode contribuir para o melhor desempenho dos algoritmos?