Itrodução a Complexidade de Algoritmos Estruturas de Dados Prof. Vilso Heck Juior
Apresetação Revisão - O Algoritmo; A Complexidade; Exercício.
Complexidade de Algoritmos REVISÃO - O ALGORITMO
O Algoritmo Os algoritmos são o cere da computação; Programas de computador são criados a partir de algoritmos; Mas o que são algoritmos? São sequêcias de passos bem defiidos, detalhados e fiitos, que quado executados realizam uma tarefa específica.
O Algoritmo Por ser fiito, um algoritmo deve: Iiciar, Processar por um determiado tempo e Termiar; Em geral, tedemos a comparar dois algoritmos distitos, que realizam uma mesma tarefa, pelo tempo ecessário à sua execução.
Complexidade de Algoritmos A COMPLEXIDADE
Diferetes computadores, muitas vezes com hardwares idêticos, podem levar tempos diferetes para processar um mesmo algoritmo; Quado trocamos algum, ou mais, ites de hardware, esta difereça tede a aumetar aida mais; Por tato, avaliar o desempeho de um algoritmo com base apeas o tempo de execução deste, é ieficiete.
Surge o coceito de Complexidade de Algoritmos; Que é uma fração da Complexidade Computacioal; A Complexidade de Algoritmos estuda e defie quato eficiete é um algoritmo em relação ao úmero de operações (passos do algoritmo) ecessárias para fializar a tarefa.
Apesar do hardware iflueciar o tempo de execução de um algoritmo, existe aida um segudo parâmetro que pode também iflueciar este tempo: O Cojuto de Dados!
Em geral, algoritmos servem para processar cojutos de dados com tamaho idetermiado: Listas; Filas; Pilhas; Tabelas; Images; Etre outros.
Exemplo: Para somar todos os elemetos de uma lista: Quado a lista tiver apeas 1 elemeto: Uma operação de soma! Quato a lista tiver 1.000.000 de elemetos: 1.000.000 de somas!
Por padrão, para deotar o tamaho do cojuto de dados a ser processado, chamamos este úmero de dados de:
Criamos, etão, uma fução de complexidade do algoritmo, que irá relacioar o úmero de istruções utilizadas por um algoritmo T() com o tamaho do cojuto de dados : T() = Neste exemplo, para cada dados, teremos operações.
As Complexidades mais comus são: log 2 log 2 2 2 3 3
Perguta 01: Qual é o T() para a pesquisa de um elemeto em uma lista? Perguta 02: Qual é o T() para iserir um elemeto em uma lista?
Temos respostas diferetes para as pergutas ateriores: Perguta 01 3 ceários existetes: O primeiro elemeto ser o procurado (melhor caso); O elemeto cetral ser o procurado (caso médio); O último elemeto ser o procurado (pior caso); Perguta 02 os 3 ceários são iguais: Uma istrução para criar o próximo elemeto; Ecadear o elemeto!
Ceários possíveis: Melhor Caso: Descreve o meor úmero de istruções possíveis de ocorrer para um determiado algoritmo (coforme os dados utilizados); No exemplo de pesquisa em uma lista, o melhor ceário existe quado o primeiro elemeto é o procurado: Neste caso, T() = 1, utiliza-se a otação: ( ) 1
Ceários possíveis: Caso Médio: Descreve o ceário mais comum, o ceário médio, de úmero de istruções; No exemplo da lista, a média os valores procurados estarão o meio da lista. Algumas vezes estarão o iicio, porém outra vezes estarão o fim, isto tora osso valor médio sedo T() = / 2, utilizado a otação: ( ) 2
Ceários possíveis: Pior Caso: Descreve o maior úmero de istruções possíveis de ocorrer para um determiado algoritmo (coforme os dados utilizados); No exemplo da lista, o valor pesquisado se ecotraria o fim e, por tato, precisaríamos de T() =, com a otação: ( )
log log 2 2 3 2 2 Represetações comus: O ceário utilizado para represetar um algoritmo é o de pior caso; Apesar de podermos quatificar as istruções ecessárias para cada algoritmo, para o pior caso, o mais comum é arredodarmos para uma das complexidade mais comus: 3
Ao medir o úmero de istruções ecessárias para cada algoritmo, devem ser cosideradas estruturas, tais como de decisão ou de repetição; Em geral, a estratégia de um algoritmo é resposável pela sua eficiêcia, mas vale lembrar que estruturas de repetição aihadas são as maiores resposáveis pelo aumeto de istruções;
Complexidade log 2 log 2 2 3 2 3 Tempo para executar N = 100, em um Core i7 980-X Extreme Editio 133 s 2 µs 13 µs 200 µs 20 ms 815.104.552.615.888 aos! 331.389.866.725.830.000 000.000.000.000.000 aos!
Exercício Idetifique quais são as complexidades computacioais do seu algoritmo de ordeação de dados. Lembre, você deverá explicar estas complexidades aplicadas em seu algoritmo: Ceário de pior caso; Ceário de caso médio; Ceário de melhor caso;