版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Estruturas de Dados e Algoritmos 2001, Claudio Esperana1IntroduoO que um algoritmo?Processo sistemtico para computar um resultado a partir de dados de entrada O que so estruturas de dados?Maneira de organizar dados e operar sobre elesAlgoritmos + estruturas de dados = programasUm programa a expresso
2、 em linguagem formal (inteligvel por um computador) de um algoritmo.2Projeto de AlgoritmosEntender a entradaEntender o que se espera na sadaRepetir:Bolar um mtodo,Se o mtodo correto, entoAnalisar a complexidade do mtodo,Se complexidade aceitvel, terminar.Implementar (programar)3Projeto de Estruturas
3、 de DadosUma modelagem abstrata dos objetos a serem manipulados e das operaes sobre elesTipo de Dados Abstrato (“Abstract Data Type”)Ex.: Uma “pilha”, com operaes “push”, “pop” etc.Uma modelagem concreta do TDA, isto , como armazenar o TDA em memria/disco e que algoritmos devem ser usados para imple
4、mentar as operaes Ex.: Pilha armazenada como lista encadeada ou vetor . 4Projeto versus ImplementaoUm bom projeto leva a uma boa implementaoTodas as idias principais j foram estudadasA traduo do projeto em programa quase mecnica(ou no)Programar uma arteUm algoritmo inferior bem programado pode ser m
5、ais til que um algoritmo eficiente mal programadoH consideraes prticas quase to importantes quanto um bom projeto, como por exemplo,Interfaces ManutenibilidadeDocumentao5Algoritmos e ComplexidadeEficincia de um algoritmo Complexidade de tempo: quanto “tempo” necessrio para computar o resultado para
6、uma instncia do problema de tamanho nPior caso: Considera-se a instncia que faz o algoritmo funcionar mais lentamenteCaso mdio: Considera-se todas as possveis instncias e mede-se o tempo mdioEficincia de uma estrutura de dadosComplexidade de espao: quanto “espao de memria/disco” preciso para armazen
7、ar a estrutura (pior caso e caso mdio)Complexidade de espao e tempo esto freqentemente relacionadas6Algoritmos e ComplexidadeEficincia medida objetivamente depende de:Como o programador implementou o algoritmo/EDCaractersticas do computador usado para fazer experimentos:Velocidade da CPUCapacidade e
8、 velocidade de acesso memria primria / secundriaEtcLinguagem / Compilador / Sistema Operacional / etcPortanto, a medio formal de complexidade tem que ser subjetiva, porm matematicamente consistente Complexidade assinttica 7Complexidade AssintticaTempo / espao medidos em nmero de “passos” do algoritm
9、o / “palavras” de memria ao invs de segundos ou bytesAnlise do algoritmo / e.d. permite estimar uma funo que depende do tamanho da entrada / nmero de dados armazenados (n).Ex.: Percebe-se que medida que n aumenta, o termo cbico comea a dominarA constante que multiplica o termo cbico tem relativament
10、e a mesma importncia que a velocidade da CPU / memria Diz-se que T(n) O(n3)8Complexidade AssintticaDefinio:T(n) O( f (n) se existem constantes c e n0 tais que T(n) c f (n) para todo n n0Alternativamente, T(n) O( f (n) se lim n T(n) / f (n) constante (mas no infinito)Exemplo:9Limite Superior e Limite
11、 InferiorNotao O usada para estabelecer limites superiores de complexidadePara estabelecer limites inferiores de complexidade usa-se a notao DefinioT(n) ( f (n) se existem constantes c e n0 tais que c f (n) T(n) para todo n n0Alternativamente, T(n) ( f (n) se lim n T(n) / f (n) 0 para todo n n0(pode
12、 ser, inclusive, infinito) 10Limites JustosObserve que se T (n) O (n3) ento, T (n) O (n4), T (n) O (n5), etc Analogamente, se T (n) (n3) ento, T (n) (n2), T (n) (n), etcSe uma funo T (n) tem como limites superior e inferior a mesma funo f (n), ento diz-se que f (n) um limite justo de T (n), ou T (n)
13、 (f (n)DefinioT (n) (f (n) T (n) O (f (n) T (n) (f (n) 11Inventrio de funes de complexidadeT (n) O (1) : constante mais rpido, impossvelT (n) O (log log n) : super-rpidoT (n) O (log n) : logartmico muito bom T (n) O (n) : linear o melhor que se pode esperar se algo no pode ser determinado sem examin
14、ar toda a entradaT (n) O (n log n) : limite de muitos problemas prticos, ex.: ordenar uma coleo de nmerosT (n) O (n2) : quadrtico T (n) O (nk) : polinomial ok para n pequenoT (n) O (kn), O (n!), O (nn) : exponencial evite! 12Exemplo: Pontos mximos em 2DUm ponto mximo de uma coleo um que no dominado
15、por nenhum outro (da coleo)Diz-se que um ponto (x1, y1) domina um ponto (x2, y2) se x1 x2 e y1 y213Exemplo Algoritmo Fora BrutaBasta testar todos os pontos e verificar se so mximos:proc maximos (Inteiro n, Ponto p 1.n) para i desde 1 at n fazer dominado falso j 1 enquanto dominado jn fazer se ij dom
16、ina (pj,pi) ento dominado verdadeiro j j + 1 se dominado ento reportar (pi) 14Observaes sobre pseudo-cdigo uma descrio do algoritmo para humanos No precisa conter detalhes desnecessrios Ex.: Assumimos que p no contm pontos duplicados, mas este pode ser um detalhe importante para o implementadorPreci
17、sa ser inteligvelSe o algoritmo usa outro algoritmo, este deve ser bvio ou deve ser explicitado. Ex.: funo domina deve ser explicitada? proc domina (Ponto p, Ponto q) retornar p.x q.x p.y q.y 15Correo do algoritmoSe o algoritmo no bvio, deve-se dar uma justificativa de sua correoEm particular:Enumer
18、e restries sobre a entrada admitida pelo algoritmoDiga porque cada resultado computado satisfaz o que pedidoDiga porque nenhum resultado correto omitido16Anlise de complexidade (pior caso)O pior caso acontece quando todos os pontos so mximosO interior do lao mais interno tem complexidade constante,
19、digamos 2 (o comando “se” e a atribuio a “j”)O lao mais interno tem complexidadeO interior do lao mais externo tem complexidadeO algoritmo tem complexidade 17SomatriosPropriedades18Alguns somatrios notveis19Resolvendo somatriosO que faramos se no soubssemos queUsar limites aproximadosAproximar por i
20、ntegrais20Justificando a aproximao por integral21Resolvendo somatrios por induoFormula-se um palpite e tenta-se prov-lo. Ex.:Prova do caso base:Para n = 0, o somatrio 0Trivialmente verdadeiro se admitirmos d = 0Prova do caso genrico22Resolvendo somatrios por induoProva do caso genrico:Coeficientes d
21、e potncias iguais tm “bater”Resolvendo temos a = 1/3, b = 1/2 e c = 1/6 23Organiza dados de mesma natureza (mesmo tamanho) em posies sucessivas da memriaCada dado identificado por um ndiceDado um ndice i possvel computar o endereo de memria correspondente em tempo constanteSe o array alocado a parti
22、r do endereo A0 e cada dado ocupa k posies, ento o i-simo elemento est no endereo Ai= A0 + i.kMatrizes so construdas analogamente como vetores de vetoresArray (vetores, matrizes)D0D1D2D3DNA0A1A2A3AN24ArrayEstrutura de dados fundamentalDiversas outras estruturas so implementadas usando arraysEm ltima
23、 anlise, a prpria memria um arrayProblemas:Alocao de memriaQuantas posies deve ter o array para uma dada aplicao?O que fazer se precisarmos mais?Como inserir um novo dado entre o k-simo e o (k+1)-simo elemento?Como remover o k-simo elemento?25Busca em ArraysDado um array A contendo n valores nas pos
24、ies A0 . An-1 e um valor v, descobrir:Se v pertence ao array (problema + simples)Qual ou quais posies de A contm v (normalmente assume-se que todos os dados em A so distintos)Algoritmo trivial: busca sequencialproc buscasequencial (v, n, A0.n-1) achei falso i 0 enquanto i n e no achei fazer se Ai =
25、v ento achei verdadeiro seno i i + 1 se achei ento reportar (i) seno reportar(-1)26Busca em ArraysBusca seqencial simples testa trs condies dentro do lao. possvel alterar o algoritmo para empregar apenas um teste no lao de repetioBusca com Sentinela:Usa-se uma posio a mais no final do array (An) que
26、 carregada com uma cpia do dado sendo buscado (v)Como garantido que v ser encontrado, no preciso se precaver contra o acesso de uma posio i no existente 27Busca Seqencial com Sentinelaproc busca_com_sentinela (v, n, A0.n) An v i 0 enquanto A i v fazer i i + 1 se i n ento reportar (i) % encontrado se
27、no reportar(-1) % no encontrado28Busca Seqencial Anlise A anlise de pior caso de ambos os algoritmos para busca seqencial so obviamente O(n), embora a busca com sentinela seja mais rpidaA anlise de caso mdio requer que estipulemos um modelo probabilstico para as entradas. Sejam: E0 , E1 , En-1 as en
28、tradas v correspondentes s situaes onde v=A0, v=A1, v=An-1En entradas v tais que v no pertence ao array Ap(Ei) a probabilidade da entrada Ei ocorrert (Ei) a complexidade do algoritmo quando recebe a entrada Ei Assumimos: p(Ei) = q/n para i np(En) = 1-q29Busca Seqencial Anlise de Caso MdioSe admitirm
29、os t (Ei) = i+1, ento temos como complexidade mdia:Para q=1/2, temos complexidade mdia 3n/4Para q=0, temos complexidade mdia nPara q=1, temos complexidade mdia n/230Arrays OrdenadosSe os dados se encontram ordenados (em ordem crescente ou decrescente), a busca pode ser feita mais eficientementeOrden
30、ao toma tempo (n log n)til se a coleo no alterada ou se alterada pouco freqentemente Busca seqencial ordenada tem complexidade mdia = n/2Busca binria tem complexidade pior caso O(log n) 31Busca Seqencial Ordenadaproc busca_ordenada (v, n, A 0 . n) An v i 0 enquanto A i v fazer i i + 1 se i n e A i =
31、 v ento reportar (i) % encontrado seno reportar (-1) % no encontrado32Busca Binriaproc busca_binria (v, n, A 0 . n1) inf 0 % limite inferior sup n-1 % limite superior enquanto inf sup fazer meio (inf + sup) div 2 se A meio v ento sup meio 1 seno retornar (meio) % Valor encontrado retornar (-1) % Val
32、or no encontrado33Busca Binria - Anlise de ComplexidadeO algoritmo funciona examinando as posies Ainf, Ainf+1, AsupCada iterao do lao elimina aproximadamente metade das posies ainda no examinadas. No pior caso:Inicialmente: nAps a 1a iterao: n/2Aps a 2a iterao: n/4 Aps a k-sima iterao: n/2k = 1Logo,
33、 no pior caso, o algoritmo faz log2 n iteraes, ou seja, o algoritmo tem complexidade O(log n)34Arrays - Insero e Remoo de Elementos preciso empregar algoritmos de busca se:A posio do elemento a ser removido no conhecida O array no pode conter elementos repetidos Se o array ordenado, deseja-se preser
34、var a ordemDeslocar elementos para criar / fechar posiesSe o array no ordenado,Insero: Adicionar elemento no final do arrayRemoo: Utilizar o elemento do final do array para ocupar a posio removida Se todas as posies esto preenchidas, insero ocasiona overflowRealocar o array Reportar erro35Exemplo: I
35、nsero em Array Ordenado Assume-se que o array A pode conter elementos iguaisExpresses lgicas so avaliadas em curto-circuitoproc insero_ordenada (v, n, max, A 0 . max 1) se n 0 e A i1 v fazer A i A i1 i i1 A i v n n + 1 seno reportar (Overflow) 36Exemplo: Remoo em Array Ordenado Algoritmo remove o el
36、emento A iPressupe-se que i foi obtido por uma operao de busca proc remoo_ordenada (i, n, A 0 . n1) se i n ento n n1 enquanto i 0A poltica de insero e remoo maneira de uma pilha tambm conheciada como “LIFO”: Last In, First Out 40Implementando Pilhas com ArraysAssumimos que uma pilha P tem os seguint
37、es campos/componentes:P.max = nmero mximo de dados comportado pela pilhaP.A 0 . P.max 1 = array com P.max elementosP.n = nmero de elementos presentes na pilha (inicialmente 0)Nossa implementao armazena os dados na pilha em P.A 0 . P.n 1, na mesma ordem em que foram empilhados:P.A 0 o dado mais antig
38、oP.A P.n 1 o dado mais recente41Implementando Pilhas com Arrays proc empilha (dado v, pilha P) se P.n 0 ento P.n P.n 1 seno reportar (Underflow)proc altura (pilha P) retornar (P.n)proc topo (pilha P) retornar (P.A P.n 1)42Complexidade da Implementao de PilhaTodas as operaes so O(1)Se for necessrio t
39、ratar overflow com realocao, insero pode ter complexidade de pior caso O(n)Um novo array de comprimento maior (ex.: 2 max) alocadoTodos os elementos so copiados para o novo array43FilasSo comumente definidas as seguintes operaes sobre filas:Enfileira (dado v, fila F) : o dado v posto na fila FDesenf
40、ileira (fila F) : descarta o dado mais antigo (menos recentemente enfileirado) da fila FComprimento (fila F) : retorna o nmero de elementos na fila FPrximo (fila F) : retorna o dado mais antigo da fila FA poltica de insero e remoo de dados maneira de uma fila conhecida como “FIFO” First In First Out
41、44Filas Implementadas com ArraysUma fila F pode ser implementada usando uma estrutura com os seguintes camposF.max = nmero mximo de dadosF.A 0 . F.max1 = array onde os dados so postosF.incio = ndice do 1o elemento da fila (inicialmente 0)F.n = nmero de elementos da filaOs elementos da fila so armaze
42、nados consecutivamente a partir de F.A F.incio podendo “dar a volta” e continuar a partir de F.A 0. Exemplo:0123456789Amax = 10incio = 7 n = 5 Primeiroelementoltimo elemento45Filas Implementadas com Arraysproc enfileira (dado v, fila F) se F.n 0 ento F.incio (F.incio + 1) mod F.max F.n F.n 1 seno re
43、portar (Underflow)proc comprimento (fila F) retornar F.nproc prximo (fila F) retornar F.A F.incio46Ordenao de ArraysOperao de grande importncia terica e prticaMuitos algoritmos conhecidos com complexidade O(n log n):HeapSortQuickSortMergeSortFreqentemente, algoritmos com complexidade assinttica pior
44、 tipicamente O(n2) acabam sendo mais eficientes para n pequeno:BubbleSortInsertionSort47Dividir para ConquistarVamos estudar o MergeSort, um algoritmo sob o princpio “Dividir para Conquistar” ou “Divide and Conquer”Consiste de:Dividir a tarefa em pequenas subtarefas“Conquistar” resolver cada subtare
45、fa aplicando o algoritmo recursivamente a cada umaCombinar as solues das subtarefas construindo assim a soluo do problema como um todoTipicamente, algoritmos do tipo “Dividir para Conquistar” so recursivosNa anlise de algoritmos recursivos os limites de complexidade precisam ser determinados resolve
46、ndo recorrncias48MergeSortConsidere um array A1.n. O algoritmo consiste das seguintes fasesDividir A em 2 sub-colees de tamanho n/2Conquistar: ordenar cada sub-coleo chamando MergeSort recursivamenteCombinar as sub-colees ordenadas formando uma nica coleo ordenadaSe uma sub-coleo tem apenas um eleme
47、nto, ela j est ordenada e configura o caso base do algoritmo49MergeSort7 5 2 4 1 6 3 07 5 2 41 6 3 02 47 51 63 027453106Dividirentrada0 1 2 3 4 5 6 72 4 5 70 1 3 62 45 71 60 327453106Combinarsada50MergeSortA rotina MergeSort abaixo ordena as posies i, i+1, i+n1 do array AA rotina Merge dada a seguir
48、proc MergeSort (A , i, n) se n 1 ento m n div 2 MergeSort (A, i, m) MergeSort (A, i + m, n m) Merge (A, i, i + m, n) 51MergeSortproc Merge (A , i1, i2, n) array B i, j, k i1, i2, i1 enquanto i i2 e j i1 + n fazer se A i Aj ento B k A i k, i k + 1, i + 1 seno B k A j k, j k + 1, j + 1 enquanto i 1, a
49、 rotina chama: a si mesma, recursivamente:Uma vez c/ n valendo n/2Outra vez c/ n valendo n - n/2 = n/2Merge, que executa n operaesPortanto, para n 1, T(n) = T (n/2) + T (n/2) + n56Resolvendo RecorrnciasVimos que a anlise do algoritmo MergeSort resultou numa frmula recorrente:Para resolver tais probl
50、emas, pode-se empregar muitas tcnicas. Vamos ver apenas algumas:“Chute” + verificao por induoIterao57Percebendo padresVejamos como T (n) se comporta para alguns valores de nT(1) = 1T(2) = T(1) + T(1) + 2 = 1 + 1 + 2 = 4T(3) = T(2) + T(1) + 3 = 4 + 1 + 3 = 8T(4) = T(2) + T(2) + 4 = 4 + 4 + 4 = 12T(8)
51、 = T(4) + T(4) + 8 = 12 + 12 + 8 = 32T(16) = T(8) + T(8) + 16 = 32 + 32 + 16 = 80T(32) = T(16) + T(16) + 32 = 80 + 80 + 32 = 19258Percebendo PadresPodemos vislumbrar que como o algoritmo opera dividindo os intervalos sempre por 2, um padro pode emergir para valores de n iguais a potncias de 2De fato
52、 observamos o seguinte quando consideramos o valor de T(n) / n:T(1) / 1=1T(2) / 2=2T(4) / 4=3T(8) / 8=4T(16) / 16=5T(2k) / 2k = k+1Ou seja, para potncias de 2, T(n) / n = (log2 n) + 1, ou T(n) = (n log2 n) + n59Provando o Palpite por InduoPrimeiro vamos nos livrar dos arredondamentos T (n/2) e T (n/
53、2) provando o teorema apenas para valores de n iguais a potncias de 2Esta hiptese simplificadora se justifica pois o algoritmo no se comporta de maneira significativamente diferente quando n no uma potncia de 2Portanto, temosVamos provar por induo que, para n = 1 ou qualquer valor par de n maior que
54、 1, T(n) = (n log2 n) + n60Provando o Palpite por InduoCaso base: n = 1T(1) = (1 log2 1) + 1 = 0 + 1 = 1Caso geral: como n uma potncia de 2, n/2 tambm e podemos admitir que a hiptese verdadeira para qualquer potncia de 2 n bk ento T(n) (nlogba)Caso 2: se a = bk ento T(n) (nk log n)Caso 3: se a bk en
55、to T(n) (nk)(Como antes, assumimos que n uma potncia de b e que o caso base T(1) tem complexidade constante)74Teorema Mestre SimplificadoExemplos:MergeSort: T(n)=2T(n/2)+ na=2, b=2, k=1. caso 2 se aplica e T(n) (n log n)T(n)=3T(n/2)+ n2a=3, b=2, k=2caso 3 se aplica (322) e T(n) (n2)T(n)=2T(n/2)+ n l
56、og nTeorema mestre (simplificado ou completo) no se aplicaPode ser resolvida por iterao75Teorema Mestre e rvores de RecursoOs trs casos do teorema mestre podem ser entendidos como as trs maneiras de distribuir o trabalho na rvore de recurso:Caso 1: O trabalho concentrado nas folhas (ex.: T(n)=4T(n/3
57、)+ n)Caso 2: O trabalho dividido igualmente entre todos os nveis (ex.: MergeSort)Caso 3: O trabalho concentrado nas razes (ex.: 3T(n/2)+ n2)76QuickSortO QuickSort provavelmente o algoritmo mais usado na prtica para ordenar arraysSua complexidade de caso mdio (n log n) Sua complexidade de pior caso (
58、n2) mas a probabilidade do pior caso acontecer fica menor medida que n cresce (caindo para 0 medida que n tende a infinito)O passo crucial do algoritmo escolher um elemento do array para servir de pivO QuickSort pode se tornar um algoritmo de complexidade de pior caso (n log n) se escolhermos sempre
59、 a mediana como piv. Usando um algoritmo que seleciona a mediana dos elementos em (n), mas na prtica o algoritmo acaba tendo um desempenho ruim77QuickSort: Partio O QuickSort utiliza como base um algoritmo de particionamentoParticionar um array em torno de um piv x significa dividi-lo em trs segment
60、os contguos contendo, respectivamente, todos os elementos menores que x, iguais a x, e maiores que x.Vamos definir uma funo partio que divide um array A de n elementos indexados a partir do ndice i, isto , Ai, Ai+1 Ai + n 1Como piv, escolheremos x = valor inicial de AiA rotina retorna m, o nmero de
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四川甘孜州稻城县资产投融资集团有限公司招聘集团会计人员1人备考题库含答案详解(综合卷)
- 2026江苏省淮安技师学院招聘教师10人备考题库附答案详解(达标题)
- 2026北京市第五十七中学招聘备考题库附答案详解(研优卷)
- 2026天津市宁河区图书馆就业见习基地招聘1人备考题库含答案详解(综合题)
- 2026年4月江苏扬州市宝应县教育系统事业单位招聘教师24人备考题库附答案详解
- 2026浙江工业职业技术学院招聘4人备考题库(第二批)附答案详解(达标题)
- 2026年吉州区综合交通运输事业发展中心面向社会公开招聘工作人员的备考题库含答案详解(精练)
- 2026年衢州市江山市赴武汉大学提前招聘新教师3人备考题库附答案详解(轻巧夺冠)
- 2026福建福州新区(长乐区)卫健教育系统招聘医学类专业人员60人备考题库附答案详解(预热题)
- 2026四川省儿童医院(四川省儿童医学中心)心理治疗师招聘1人备考题库及答案详解1套
- 财政部人社部就业补助资金管理办法2026版解读
- 吸塑厂生产安全管理制度
- 2025年医学影像复试题目及答案
- 无人机应用于施工巡检方案
- 洁净区化学品安全培训
- 羊水栓塞指南2025版
- 2025西部科学城重庆高新区招聘急需紧缺人才35人参考笔试题库及答案解析
- 2025辽宁葫芦岛市总工会招聘工会社会工作者5人笔试考试参考试题及答案解析
- 太空探索家课件
- 供应商质量管理培训范本
- 呆滞物料的预防和处理培训
评论
0/150
提交评论