01 algorimos e complexidade introduç o

26
Conceitos sobre Algoritmo e Complexidade ALGORITMO E COMPLEXIDADE

Transcript of 01 algorimos e complexidade introduç o

ConceitossobreAlgoritmoeComplexidadeALGORITMOECOMPLEXIDADE

•Objectivo:• Conhecer os conceitos e técnicas básicas de cálculo decomplexidade algorítmica que servirão de bases para acompreensãodadisciplina.

•Oqueéumalgoritmo?

• Algoritmo: uma sequência finita (lógica) de operações que apartirdeumconjuntodevariáveiscomoentradaproduzumasaídadesejada.

• Umalgoritmoéumasequêncianãoambíguade instruçõesqueéexecutada até que determinada condição se verifique. Maisespecificamente, em matemática, constitui o conjunto deprocessos (e símbolos que os representam) para efetuar umcálculo.

• AanálisedealgoritmoséumaatividadequecontribuiparaoentendimentofundamentaldaCiênciadaComputação.Aconstruçãodeumalgoritmodevevisarnãoapenasàsoluçãode um determinado problema, mas à construção de um algoritmo bom, ou seja, quesolucione o problema e seja eficiente. Conhecer a complexidade de um algoritmo éimportanteparapoderdecidirseaimplementaçãodoalgoritmoéviável.

• Acomplexidadedealgoritmosconsistenaquantidadedetrabalhonecessáriaparaasuaexecução, expressa em função das operações fundamentais, as quais variam de acordocomoalgoritmo,eemfunçãodovolumededados.

• Umadasmaisimportantesmedidasdecomplexidadedealgoritmoséamedidadetempo.IstosejustificaemrazãodeboapartedapesquisaemCiênciadaComputaçãoconsistirdoprojeto e análise de algoritmos em relação à eficiência, ou seja, projetar algoritmosqueforneçamasoluçãodoproblemaemtempoaceitável.

• Quandoexistemaisdeumalgoritmoparaaresoluçãodeummesmoproblemaénecessárioqueoanalistapossaidentificarqualdosalgoritmoséomaisindicado,sejaemtermosdeprecisãooutempodeexecuçãoNestemomentoumametodologiaqueauxilienoprocessodeanáliseseriaomais indicado para que o analista pudesse fazer, com boa margem de segurança, a melhorescolha.

Análisedealgoritmos• Oquesignifica?• Preverosrecursosqueoalgoritmonecessitará• Tempo,memória,larguradebanda,hardware...

• OTempo• Númerodeoperaçõesprimitivasouetapasexecutadas• Dependedotamanhodaentrada

• Formasdeanalisar• Contartodasasinstruções–custoexacto.• Contar as instruçõesmais importantes (mais executadas,mais caras) – custoaproximado.

Análisedealgoritmos• Damesma forma que distinguimos um algoritmo de sua aplicação auma particular “entrada”, convém distinguir problemas de suasinstâncias. Todo problema computacional é uma colecção deinstâncias.

• Cada instânciadoproblemaédefinidaporumparticularconjuntodedados.Otamanhodeumainstânciadeumproblemaéaquantidadededados necessária para descrever a instância. O tamanho de umainstânciaédescrito,emgeral,porumsónúmeronatural,masàsvezeséconveniente usar dois ou até mais números. A ideia de tamanhopermitedizerqueumainstânciaémenoroumaiorqueoutra.

• Apalavrainstânciaéumneologismoimportadodoinglês.Elaestásendoempregadaaquinosentidodeexemplo,espécime,amostra,ilustração.

•Comoéfeitaaescolhadeumalgoritmo,ouquaisoscritériosautilizar?

•Comoéfeitaaescolhadeumalgoritmo,ouquaisoscritériosautilizar?

•Facilidadedecompressão,codificaçãoedepuração.•Eficiêncianautilizaçãodosrecursosdocomputadorerapidez.

• A analise de um algoritmo fornece uma medida objectiva dedesempenhoproporcionalaotempodeexecuçãodoalgoritmo.

CaracterísticasdosAlgoritmos• Independente: Não depende de linguagem de programação ou de maquina(computador).

• Definido:Algoritmodeveterpassosclaroseconcretos.• Finito:Umalgoritmocomeçaeprecisaquesejaterminado(tenhafim)• Preciso:Cadapassoprecisaumcalculocorrecto.• Capacidadedereceberdado(s)deentradadomundoexterior;• Poder gerar informações de saída para o mundo externo ao do ambiente doalgoritmo;

• Serefetivo(todasasetapasespecificadasnoalgoritmodevemseralcançáveisemumtempofinito).

• Nãodarmargemàduplainterpretação(nãoambíguo)

QualidadesdeumAlgoritmo

Abaixoalgumasdasqualidadesdosalgoritmos:

• Geral:Edesejávelqueoalgoritmosejacapazderesolverumaclassedeproblemasomaisamplopossível.

• Eficiente: Um algoritmo é eficiente quanto menos recursos em tempo, espaço (dememória)eprocessadoresconsumir.

• Corretude(Correto):Paraqualqueralgoritmo,nósdevemosprovarqueelesempreretornaasaídadesejadaparatodasasinstânciasválidasdoproblema.

• Levandoemconsideraçãoqueumproblemapodetermasdeumavidadesolução,temosquesercapazesdedecidirqualéoalgoritmomaiseficiente,oquemenostempodemoreemresolveroproblema,oquemenosrecursosutilize.

• Demodogeralédifícilencontrarumalgoritmoquereúnatodasasqualidades,masoquedevemos procurar é um algoritmo que satisfaça melhor os requisitos de um dadoproblema.

•Quais os critériosdevemos analisar para a escolhadeumalgoritmo?

Tempo de execução, recursos de sistema usados,portabilidadeefiabilidade.Ouseja,seualgoritmopodeser portado para qualquer aplicativo que necessitedaquele processamento para o qual seu algoritmo foicriado.Issoéimportantequandosetrabalhaemescala,fazendomaisdeumsoftware.

Seualgoritmoécapazde lidarcom todosospossíveiserros que possam ser introduzidos em dados ou pelousuário?

•Porque analisar a eficiência de um algoritmo se oscomputadoresestãocadadiamaisrápidos?

Complexidade

•Oqueéacomplexidade?

•Porqueanecessidadedecriarmosnovosalgoritmosparaproblemasquejátêmsolução?

•Porqueoestudodacomplexidade?

Complexidade

•A Complexidade de um algoritmo consiste naquantidadede"trabalho"necessáriaparaasuaexecução, expressa em função das operaçõesfundamentais,asquaisvariamdeacordocomoalgoritmo,eemfunçãodovolumededados.

Complexidade

• Complexidade: Visa definir a expressão matemática que expressa aquantidadedepassosgastosporumalgoritmopararesolverumcertoproblemaemrelaçãoaotamanhodaentrada.• Acomplexidademedeo temporelativodeexecuçãoe/ouusodamemória.Umaanálise da complexidade de um algoritmo pode-se focar em uma série deespecificações quanto sua execução e/ou uso damemória, como omelhor casopossível,oque,ematémesmoocasomédio.Damesmamaneirapode-sedesejaracomplexidadetotal(oureal)apenasacomplexidadeassintótica.

Complexidade

• Muitas vezes as pessoas quando começam a estudar algoritmosperguntam-sequalanecessidadededesenvolvernovosalgoritmosparaproblemas que já têm solução. A performance é extremamenteimportantenainformáticapeloqueexisteumanecessidadeconstantede melhorar os algoritmos. Apesar de parecer contraditório, com oaumento da velocidade dos computadores, torna-se cada vez maisimportantedesenvolveralgoritmosmaiseficientes,devidoaoaumentoconstantedo"tamanho"doproblemasaseremresolvidos.

• Devido a este factor surge aComplexidade Computacional, pois eatravésdelaque se torna possível determinar se a implementaçãodedeterminadoalgoritmoéviável.

Complexidade

•ComplexidadedeAlgoritmos

•Aeficiênciade umalgoritmopode sermedida atravésdeseutempodeexecução.

•Éamelhormedida???

Complexidade

•O tempo de execução não depende somente doalgoritmo, mas do conjunto de instruções docomputador, a qualidade do compilador, e ahabilidadedoprogramador?

•O tempo de execução de um algoritmo para umadeterminadaentradapodesermedidopelonúmerodeoperaçõesprimitivasqueeleexecuta.

ComplexidadeAlgorítmica

Esta selecçãopodeserexecutadadamaneiramaissimplesdesdecomoobservaraquantidadede linhasdoprograma,masquandooprogramacresceserequerumamedição mas exacta e apropriada, por isso se realizam certas operaçõesmatemáticasquegarante aeficiênciateóricadoprograma,aoestudodestescasossedenominaComplexidadeAlgorítmica.

• Aeficiênciadeumalgoritmopodeserquantificadacomasseguintesmedidasdecomplexidade.• Complexidade Temporal, ou tempo de execução é o tempo necessário para executar algumprograma.

• ComplexidadeEspacial:Memóriaqueutilizaumprogramaparasuaexecução,Aeficiênciaemmemóriadeumalgoritmoindicaaquantidadedeespaçorequeridoparaexecutaroalgoritmo.

ComplexidadeAlgorítmica

• ParaissovamosachamarotamanhodosdadosodaentradacomNetentaremoscalcularacomplexidadeemfunçãodeN.Entendemosportamanhoda entradao númerode componentes sobre os que se vá aexecutaroalgoritmo.Porexemplo,adimensãodovectoraordenarouotamanhodasmatrizesamultiplicar.

• A unidade de tempo a que deve fazer referencia estas medidas deeficiêncianãopodeserexpressadaemsegundosouemoutraunidadede tempo concreta, pois não existe um ordenador standard a quepossamfazerreferenciatodasasmedidas.

AnáliseAssintótica.

• Sabemosquedentrodaáreadeinformáticaasdisciplinasmaiscomplexasecom maior índice de reprovação nos cursos superiores são algoritmos eestrutura de dados e, na maioria das vezes, um bom conhecimento deanáliseassintóticaresolveriaoproblemaoufacilitariaacompreensãodetemasmaisavançados.

• Fazer uma análise assintótica é se preocupar com valores grandes deentrada para o processamento do algoritmo, com o intuito de calcular otempo total de processamento e viabilidade para determinados casos.Muitas vezes com isso podemos ser capazes de saber se é necessária autilização de outrametodologia ou ferramenta para a realização de umatarefa.

AnáliseAssintótica.

• Junto com o estudo de análise assintótica, temos o conceito de notaçãoassintótica,queéa representaçãomatemáticacriadaporPaulBachmannnoséculoXIX.Nela,temostrêsnotaçõescomunsparaclassificarasordensdas funções,essasordensdeterminamaequivalênciadas funções,ousejapodemos teruma funçãoquesejado tipon²,essa funçãoéequivalenteàfunção 400n². Sãoequivalentesassintoticamente falando, lembrandoquesemprenospreocupamoscomvaloresdeentradagrandesparan.As trêsprincipais classificações de ordem são: Ordem O. “Ordem Ômega eOrdemTheta.Pesquisar:TheArtofComputerProgramming(deKnuth).“

•Duvidas?

• Dadoumproblemacomoencontramosumalgoritmoeficienteparaasuasolução?

• Encontradoessealgoritmocomocompararessealgoritmocomoutrosalgoritmosquesolucionamomesmoproblema?

• Comodeveríamosjulgaraqualidadedosalgoritmos?

• Qualoalgoritmodemenorcustopossívelpararesolverumproblemaparticular?