Vous êtes sur la page 1sur 308
MPA CO CU ne nenes a veal He! coh Se een Ce oe ee ruta de Gadns hsicas, contend lis cer ree “op Rene eaten ret ee Oe ere ier ay tienes ees pa ae Seer i are er S oe ae 3. CENGAGE ‘© Learning” Proto de Algariiner Cam implements cminaeces ‘ret avi ai La Ross itr de Derventa Ug Coun ‘Super de Proso Ebr Fb Gongs Sipervsra de Pode Grice: ban Alencar busier Prostar Resta Suc Campos Copdequ Miia Caveat Di Gixomo ei: Aa is Campos: No zareeFadine Cperro sexe Cap: F.ZDsb0 Deven Sie Inpresso no Bras Printed in Brit. 1234" 1000807 (©2007 Cogn Leming Edges i j Tasos ets reser Nene pater o> er ered ar gare tm em, ‘erage por est. dora. ‘os iatres eon ses sages porta nook 02,108 1060 ds Les. de Da rer ge, Pa norman ore novos ron ene em conti pl teleone 080011938, Fra permis dea de terse cbgennie Siionedresodwecgecom | ©2001 Cengage Leming Todor or rates sea, senasressaz0%50 engage ean anfomin Suter ‘i ses s00 Fe 93089901 Psu igri coe ete it A memaéria dos meus pais, Nelson e Célias Patricia ¢ Paula, minkas fils. Gastei uma hora pensando um verso que a pena nfo quer eserever No entanto ele est ed dentro inquieto, vivo. Ble est ca dentro fe nao quer sai. Mas a poesia deste momento jmunda minha vida inteira. Carlos Drummond de Andrade ~ “Jornal de Poesia” “0. fi Vamos peovar que 0 algoritmo apresentado no Programa 1.1 ¢ étimo, Program 1.1 Algoritmo para obter 0 maximo de um conunto pasinge cpl: Publis Moe fama) | ve static int se (Int v[], Eat a vO}; int for (int § return ta ) Lis Be my $44) AF (rmee < vf) mae = y mio cemento de wn conju ‘Teorema: Qualguralgrtn par ecotea © maior om'n denenton'm > hf pele meson n= 1 compari sca, qu cada vm dos 2 ora: Deve sr mostra, por mia de compara an Glenn € menor do que ag otro sane gon ~1 compar acre, 8 ' nero de compara fr wads 0 teorena anaieno dt ge, #0 come media de cast, sto 9 milo maz du cabs Mar € tin A min do oto de een du arin dpe ype do ana neat Sodan Po i soa cai po de txecft dean pon cons ma fg do tatu deta Ext Parag sn,» ens a ng dots paar San sens oar deo cd eto mae do Fregm 1 oat psa proper oto ate we tes sla tno myn un grin eet i Scr: eo des ent Jeter se ends nto 0 al Pode tor de aatar ene fe, bem con outa pala chive “0 signcado das poloves class, package, publi, a nguager ava, eta explcao na Sesho 1.3 6 Pits de Agetmes ‘Temos entio de distinguir trés cendrios: melhor easo, pior easo e caso médio, 0 methor caso corresponde ao menor tempo de execucao sobre todas as passiveis entradas de tamanho m. © pior easo corresponde ao maior tenipo de execugio sobre todas as entradas de tamanho n. Se f é uma fungao de complexidade Daseada na andlise de pior caso, entéo 0 custo de aplicar o algoritmo nunca é maior do que f(r) © caso médio (ou caso esperaddo) corresponde & média dos tempos de exe: ccugio de todas as entradas de tamanho . Na anélise do caso esperado, uma Aistribuigéo de probabilidades sobre o conjunto de entradas de tamanha m é suposta, € 0 custo médio é obtido com base nessa distribuicdo. Por essa razio, a nélise do caso médio ¢ geralmente muito mais diffell de obter do que as analises do methor e do pior caso. E comum supor uma distribuigdo de probabilidades em ‘que todas as entradas possiveis slo igualmente proviweis. Entretanto, na prética isso nem sempre ¢ verdade. Por isso, a anise do caso esperado dos algoritmos a serem estudados 36 seré apresentada quando esta fizer sentido, Para ifustrar esses conceitos considere 0 problema de acessar os registros de um arquivo, Cada registro contém uma ehave tinica, que é utilizada para recuperar registros do arquivo. Dada uma chave qualquer, 0 problema consiste em localizar o registro que contenha essa chave. O algoritino de pesquisa mais siaples ‘ue existe € 0 que faz: uma pesquisa seqiiencial, Esse algoritmo examina ov registros na ordem em que eles aparecem no arquivo, até que o registro procurado saeja encontrado ou fique determinado que ele nia se encontra no aqui, Seja f uma funcio de complexidade tal que f(n) 6 0 nimero de registros consultados no arquivo, isto é, 0 nimero de vezes que a chave de consulta & ‘comparada com a chave de cada registro, Os casos a considerar sao: melhor caso: f(n) = 1 ior caso f(n) =n caso médion fn) = (n+ 1)/2 © melhor caso ocorre quando o registro procurado ¢ © primero consultado. pior caso ovorre quando o registto procurado é o timo consultade ou entao niko est presente no arquivo; para tal, ¢ nevessétio realizar n comparagbes, Para 0 estudo do caso médio, vamos considerar que toda pesquisa recupera, lun registro, niio existindo, portanto, pesquisa sem sucesso, Se p; for & probabili- dade de que o i-ésimo registro seja procurado, e considerando que para recuperar ‘© ésimo registro sito necessérias { comparagies, entao, Sen) Dx prt 2 x pb Sx ma boot NX Dy Para calcular f(n) basta conhecer a disteibuigio de probabilidades p.. Se cada registro tiver a mesma probabilidade de ser acessado que todos os outros, entio Pi=1)n,0. 0, para o melhor caso, 0 pior caso ¢ caso médio, Programa 1.2 Implementacso deta pare abter 0 mimo ¢ 0 minimo page cats Pebtieataee im mil (Int vl, tnt) Pom v(m = vO for (int i= 1; bens t4) ( if (v{i] > ma) mex ie Celi] = ain) ma Ja ing} = me nt smaxMin| 0) = mac; min [1] = min; return midi; 0 Programa 1.2 pode ser facilmente melhorado. Basta observar que a com- paracic vfi] < min somente @ necessétia quando 0 resultado da comparagio, fi] > mar éfalso, Uma nova versio do algoritmo pode ser vista no Programa 1.3 Para esta implementagin, 96 casos a eonsiderar so: 2-1) or e280 3n/2-3/2 «aso médio ai cxescente. 0 ‘© methor caso ocorre quando os elementos de w esti em ordem erescente por easo ovorre quando os elementos de v esto em ordem decrescente, No caso ‘médio, v{f] € maior do que maz a metade das vezes. Logo, Fin) 8 Prins de Aigortmes Programa 1.3 Implementacso melhorada para obter 0 maximo e 0 minimo Package cap; Public class Max\n? ( Public static int {] macMnd (int vl]. int n) { int max = v[0], min = v[0]; for (int i= Vie ms it) if (vf > mx) mae = vfis else if (v{i} < min) min = v[i]; int masiin|} = new int [2]: mmaxdMin[O| ~ mac; rain] = mins return main, ) } Considerando © némero de comparagdes realizadas, existe a possibilidade de obter um algoritmo mais eficiente para este problema? A resposta € sim, Considere o seguinte algoritmo: 1) Compare os elementos de » aos pares, separando-o8 em dois subconjuntos de acordo com o resultado da comparagao, colocando os maiores em um subconjunto e os menores no outro, confarme mostrado na Figura Ll, tum custo de fn/2]? comparagoes. 2) 0 maximo ¢ obtido do subconjunto que contés uum custo de fra/2} — 1 cormparagies © minimo ¢ obtido do subconjunto que contém os menores elementos, a sum custo de fra/2] — 1 eomparagies sm os maiores elementos, a 3) Figura 1.1 Partcso de v em dots subconjunts, A implementacio do algoritino descrito anteriormente é apresentada no Pro- sgrama LA vk frog 17 # catia de fing toto: se 2 & am mimeo ral qualquer, ents fe] ‘corresponds a menor inteiro maior ot ful a. Da mesma form, x Tangle fe cheneda I, angio piso: (z| curreeponde ao maine intelto menor ot igual 2. See 471808 ease [ea lel=2 [eel (ne) ook, nes opt irdeto 9 Programa 1.4 Outra implementaedo para obter © méximo ¢ 0 minim, ants aan Mo , Pe ce de int (fms (int ink ») ¢ int max, min, FimDoAne; ME le 3) 5 0 (ot) = ont Pmt =m tse FinDotoet = 21 SPevlol = elt) {me = v{0]5 asin = wfa]s } se ep Cam = vol} while (5 = FixDone) { Teli] > wll) L 8 (oLi] > mas) me = of Js if lie] min} in = vf else { € (v{] < mix) min = vfs it (ota ae es La Jot matin} = new tnt |2]; sn] = mi tc} = ins (0s elementos de v so comparados dois a dois, os elementos mniores si comparados com mar e 9s elementos menores sao comparados com min. Quando ‘6 impar, o elemento que esta na posigio v[n ~ 1] € duplicado na posigio v[n] para eviter um tratamento de excogao. Para essa implementagio, 2 an 2 n-2 f= 8425 =2, para n> 0, 2 para o melhor caso, o pinr caso e 0 caso médio. A Tabela 1.1 apresenta uma comparagio entre os algoritmos dos Programas 12, 1.3 ¢ 14, considerando o nimero de comparagies como medida de complexi- dade. Os algoritmos MarMin2 ¢ MazMin9 s80 superiores 20 algoritmo MazMint de forma geral. O algoritmo MazMing ¢ superior ao algoritmo MaxMin& com re- lagio a0 pior caso e bastante peoximo quanto ao caso médi, Considerando novamente o nimero de comparagies realizadas, existe possi- bilidade de obter um algoritimo mais eficiente para esse problema? Para responder ‘essa questo & necessicio conhecer o limite inferior para a classe de algoritmos para obter o maior ¢ 0 menor elemento de um conjunto, 10 Pret de Agena Tabela 1.1 Compara¢ao dos algoritmos para obter © méximo e 6 minimo ‘Os wes algoritmos Pio ease Wasklin’ [a= 1) | ey aes Mosifing [91 [An 1) B32 (Marifing S22 BT} np F Uma técnica muito utiizada para obter o limite inferior para uma classe stualquer de algaritmos @ 0 uso de um aréculo® Dado ‘um modelo de computagan ue expresse © comportamento do algoritmo, o ordculo informa o resultade de {ada passo passive, que, no nosso caso, seria o resultado de cala comparagan, Para derivar o limite inferior, o ordeulo procura sempre fazer com que o algoritino trabalho 0 maximo, escoltendo como resultado da présima comparagio. suelo ‘que cause 0 maior trabalho possivel necessério para determina a tespesta final, © fcorema a seguir, apresentado por Horowitz e Sahni (1978, p. 476), utiliza luca ordeulo para derivar limite inferior no nimero de comparagbes necrssariee para obter 0 méximo © 0 minime de umm conjunto con m elementos ‘Teorema: Qualquer algoritmo para encontrar © maior eo menor elementos de lum conjunto com m elementas néo ordenados, n > 1, faz pelo menas $/1/2] —2 comparagies. Prova: A técnica utilzeda define ui oréculo que descreve o comportamento do algoritmo por meio de um eonjunto de n-tuplas, mais um conjunto de regras associadas que mostram as tuplas possiveis (estados) que um algoritino pode ‘ssumir & partir de uma dada tupla ¢ uma tnica comparagio, © comportamenio do slgpiane pode sr dsc por un tap, epee Senta pr (ated), onde a repens onanero deen gue ca he Compares: 8 representa o nimero de slenaitin he fonts each en perderam em comparaies rain; c repress @ amie cera ne foram perddons « muna venerant em compraghes tilssiee ds imero de eens te fram vedo prdolore sconce eto as: © algrine na no estado (200.0 termina cm OL Ln Dy Des fenna, aps cada cononragio a tupa (abd) cme poms apurnsoe te assume um dente o es staden pose, moat ta Pigs © rineio asso reqerneesniamente a manipula do componente Obearve que o canto mais pio pare lear 8 omponsites sic ven Iny2]muancas de extadoe tena com a apa (0.20/20) vor enna da compact dos elements de dando, A Seg gars eke Bente até um so ecesstras n/3 “1 hnangas de ede oer aae {De corde conto Nove DicindrioAurdi da Lingua Portuguesa, um orbeulé 1, Resposta ‘eam des & quent o consulava, 2 Divindade que responde consaltss oresta o Genet fea de Delos. 3: Fig. Palas, sentenca ou doi spiraled ov tee ears sordade: as ordeals dos profes, os arcu la acia oot nvodcso Grape etd wo? {dis anmitc daca compare} onde teow {om tenon de omar cm Gather hd ou Undebouun dee) Cheer woes ’ eeea tt) S552. (di etamentn dest part} fathe-ld-+1) see 22 { dois elementos de c sin comparados } Figura 1.2 Seis estados possives assumidos pla tupla (ay, cd) 5 maior lament de seo mimo de comparates ave € neces pate ote 0 td pra com [e/a = 1 anuanga de eta Log, par ote stab {itn 2) pred evad (40,00) sho neces inl PL nya) —1 = i012 compara, © ; nr tan a qu seo nme de compre to ne scarred cs, aan opts Mosh {Proton tote 1.3.1 Comportamento Assintétice de Funcoes Como ji foi observado anteriormente, 0 custo para obter uma solugio para ut dado problema aumenta com 0 tamanho n do problema. © némero de compa ragbes para encontrar o maior elemento de um conjumto de n inteiros, ou para onder on elementos de mn conjnto com meemento, aumenta conn n. O pare retro n fornece urna med.da da dificuldade para se resolver o problema, no sentido de que o tempo necessarin para resolver o problema eresce quando m cresce. ler algoritmo custa ponce ara valores suficentemente pequenos de n, qualquer algorts para nor caeettad, momo th egoitnos nee En ontra pala, fescolha do algoritmo aio é um problema critico para problemas de tamanho ‘peqweno. Logo, a andlise de algoritmos é realizada para valores grandes de n. Para tal, considera-se 0 compertamento de suas fungies de custo para valores grandes den, isto 6, estuda-se 0 comportamento assintético das fungBes de custo. ° comportamento assintotico de f(n) representa o limite do comportamento do costo quando n eresce. | e ‘com apenas algumas operagies ‘A analise de um algpritmo geralmente conta com ape lementares¢, em muitos casos, somente com uma operagio elementar. A medida de esto ov medida de camped reat rsciment asin da peraio considerada, A defnigdo seguinte relaciona 0 comportamento assintético de dias fungées distintas. 12 Preto de Agree Dating: Uns fio f(n) domina assintoticamente outa fn g(n) se existem duss constantes positivas © € mi tais que, para n > m, temos lg(n)] < ones ‘que, para n > m, temos |g{n)| < significado da definigio no pardigrafo anterior pode ser expresso em termos sréficos, conforme ilustra a Figura 1.3 pene . Figura 1.3 Dominacio asinotica de f(n) sobre gn) Exemplo: Sejam g(n) =m e f(n) = —n?. Temos que {nl < | — n?] 108 gue [nl < | ~ nj para todo men au a eam hl < |= zt dete anterior aia, Logo, J) deen sintoticanente 0). Observe ie (n) nto domina assintoticamente f(x) porque |~ n2| > eln| para todo n > em > 1, qualquer que sea o valor de e elidlaeeaded Exemplo: Sejam g(n) = (n-+1)? e f(n) = n®. As fungdes a(n) e f(n) dominam ‘assintoticamente uma a outra, desde que |(n + 1)2| < 4|n?| para a2 1 ¢ bet pena wes que [(n + P| S dln*l para n > Le [ni < Knuth (1968, p. 104) sugeriu uma notagio para a dominagio assintétiea, Para expressar que f(n) domina assintoticamenteg(n) escrevemos a(n) = OLF(n))y cm que se Iég(n) 6 da ordem no maximo f(n). Por exemplo, quando dizemes que © tempo de execucia T(n) de um programa ¢ O(n), isso significa que existem onstantes ce tls que, para valores ders mares ou iguis a.m, T(n) © on? ‘gura L.3 mostra um exemplo grafico de dominagio assintética que ilust 8 notagio O. O valor da eonstante m mostrado 9 menor alr poste ae ‘qualquer valor maior também ¢ - As fines de complexe de tempo so defini sobre os nies no no estos, ainda qu psa tae sr no inte. A defono ‘a notagdo de Knuth, Heenan onalig Definigéo notagio O: Uma funcio a(n) ¢ O(f(n)) se existem duas constantes Positivas © e m tais que g(n) < ef{(n), para todo n % m. Exemplo: Sefa g{n) = (n+1)2. Logo, a(n) 6 0( porque (n+ 1)? < dn? para n> 1 Iso Cap. 1 irdugso 13 A funcio g(n) = Sn + 2n?-+-n 6 O(n), Basta mostrar que 3n3 + se a Gn, para n > 0. A fangio g(n) = Sn? +2n? +n é também O(n), | Eitectanto essa afrmagic ¢ mais fraca do que dizer aue g(t) € O(n?) Exemplo: Suponha g(ni =n e f(x) =n®, Sabemos pela definigdo anterior que io) € O08), pois para a > 0, n- my n2 me ao existe uma constante ¢ que possa ser maior ou igual an pare todo n. Exemplo: A funcio g(n) = loggn € O{logn). O logyn difere do logen por una fonstante que no caso € gy c. Como n= é%", tomando 0 Iogaritmo base b em Simbos os lados da igualdacle, temos que logy m = lox €°8" = logan x logy: Algumas operagées que podem ser realizadas com a notagio O sto apre- sentadas na Tabela 1.2. As provas das propriedades podem ser encontradas ex Kauth (1968) ou em Abo, Hoperoft ¢ Ullman (1983) Tabela 1.2 Operardes com a notacsoO Fin) = OF) exO(f(n)) = OLf(n)) ©= ematante O10) ~OLF(m) = OL4")) O1OLFm)) = OCF) Ofmax f(r), 9(0))) = O1F(a)a(n)) = O(F¢m)atm)) O(s() + O(a{n)) (Lo O(a{e)) FlaO(a(n)) Exemplo: A regra da soma O(f(n)) +O(9(n)) pode ser wsada para ealouar 0 tempo de execugao de uma seqlncia de trechos de programas. Suponha trés trecios de programas ctjos tempos so O(n}, O(nt) Ofnlogn). O tempo de execu dos dois primates treches & Omaa(n,n®)), que & O(n). O tempo de execugio de todos os tr trechos 6 entio O(maz(n",nlogn)), que ¢ O(n). Exemplo: 0 produto de flogn + &-+ O(1/n)] por [n+ O(y/A)] €nlogn + hn + O(log. Dizer que of) € O(f(n)) significa que f(n) um limite superior pars a taxa de crescimento de g(n). A definiglo a seguir especifica um Tnnite inferior para a(n). Definiglo notagio : Uma fungio a(n) & Mf (n)) se exstcem duas constantes em tais que o(n) > ef(n), para todo re > m. Exemplo: Para mostra: que g(n) = Sn° +202 ¢ 2(n2), basta fazer €= 1, ent3o Bn! + 2n? > ni para n> 0 1 Projet de Agromos Exemplo: Sejam g(n) = n para n impar (n> 1) ¢ a(n) = n2/10 para nm par (12 0), Nesse caso g(n) 6 (n"), bastando considerar c™= 1/10 en =0,2.4.6, A Figura 1.4{a) mostra intuitivamente o significado da notagio ®. Para todos os valores que esto & direita de m, o valor de g(r) esta sobre ou acima de valor de of) Gere 14 Exel ero par as ntacdes 9 ¢ (a) an) = MLF)). (8) a) = Definigéo notagio ©: Uma fungio g(n) € O(f(n)) existirem constantes po- sitvas¢1,€2 © m tais que 0 < f(a) < aln) m, A Figure 1.4(0) mostra intutivamente 0 significado da notagio @. Dizemos save a(n) = OL (n)) se existe eonstantes ey, cn © m tals que, para todo no om, © valor de g(n) est4 sobre ou acima de ¢1 f(n) e sobre on abaixo de caf (n). Em m, a funda g(n) ¢ igual a fn) a menos de uma constante. Neste cas, f(n) € ut limite assintotico firme, Exemplo: Seja 9{n) = n#/3—2n, Varnos mostrar que a(n) = @(n2). Para isso, temos de obter constantes e1, 02 ¢ m tals que: O Indo dliteto da desigualdade sera sempre vélido para qualquer valor de n> 4 quando escothemos ¢; > 1/3. Da mesma f forma, escolbiendo ¢ < 1/21, a lado esquerdo da desigualdade sera vélido para qualquer valor de m > 7. Logo, escolliendo cy = 1/21, e = 1/3 e m= 7, € possivel verificar que n2/3 — 2n = (n°). Outras constantes podem exisir, mas o importante é quo existe alguma escolha para as trés constantes, © limite assint6ties superior definido pela notagao O pode ser assintotica- ‘mente firme ou nfo, Por exemplo, o limite 2n? = O(n?) & assintoticamente Arme, ap tovoducso 15 limite 2n = O(n?) no ¢ assintoticamente firme. A notagio o "sprenentnda an pre detnt un nie spain wsiattinmene firme - Definigio notagdo 0: Uma fungio g(n) é o(f(n)) se, para qualquer constante eat ao ae) cof) panto nm Exemplo: 2n = ofn?), mas 2n? # ofr?) s dfniges das notagen O eo so smlars. A principal dfernga & que em. ae ‘Olro)) a expresso 0 < g(n) < cf(n) é valida para flguma constants ne en gC) = el fn), a expen 0 < g(a) < ef) & Ada par fodas as constantes ¢ > O. Tntuitivamente, na notagao 0, a fungio o{n) tem um toa te meter qv Fn) cuando nea par inf. Algans nore aoe ata asegulr prea deinigo da notgio : fn) Jim, M2) Por analogia, a notacio w esta relacionada com a notagio 9 da mesina forma que fa notagio o esta relacionada com a notagao O. Definigio notagdo w: Uma fungio a(n) & u(f(n)) se, para qualquer constante > 0, entio 0 < ef(n) < g{n) para todo n > m. Exemplo: % = a(n), mas #u(n"). A relagio g(x) = w(f() implicn 0), dn Fay s¢ 0 limite existir 1.3.2. Classes de Comportamento Assintdtico Se J 6 uma fungio de complexidade para um algoritmo F, entao O(f) & consderada a complexidade assintotica os o comportamento assititico do algoritmo F. Iguainent, seg € um Fangio para un algritino G,eatbo Of) ¢ considerada 1 complexidade assintética do algoritino G. A relacio de dominagi assintotica permite comparar fungoes de complexidadte, Entretanto, se as fungbes Jeg dominam assintoricamente wma & ontra, eno os algoritmos associados sao ‘squivalentes. Nesses casos, 0 compartamento assintotico nfo serve para cormparar ‘8 algoritmos, Por exemuplo, dois algoritmos F e G aplicados & mesma classe de Sroblamas, send que F leva ts veo tepo de @ apse exceed, sto & Flo) = 3g{n), sendo que OLf(n)) = Olan). Logo, o comportamento assinti to ere fr compas sins Gr prgve oe rem pe Sar ‘uma constante, 28 Prieto de Agotmes Programas podem sr avalados por me malades por mio da compara de ss fn se cnet, neglgendono m estan de prmeieaitede Ve aren cm tempo do eeeugn Ofn)¢ melor qe tn gan can Cones exo Ol). Entra, a carta depopercnaldnd om cl podern alterar essa consideracao. Por exemplo, & possivel que um programa owe 1 wakes de tempo para er exeotao, tant ants tae aed ae Ae fempo. Qual ds do programas melhor? A report porgunta doen do tamano do probe asr exe Pass pons de tanan © 0 porama one tempos ees tutor do que o programa com tempo de eceugio TO Parn proton os sutreda de dados pequena ¢ preferivel usar o programa cujo tempo de io © 0(%), Enaetanto, quando n esc, o pogtma com tempo Ob lan eaiey ‘Inais tempo que o progratna O(n). “ A maior dos lgritae pose i nos poss um pardmetro qu afta o tempo de excugio se forma mai sgufeativa, ustalnate 9 mimore de lens toe renee Pane Darimetro pode sro nimero de egies det avs orden nimero de nés de um grafo. At — trafo. As pincipis essen de problemas pono ae fungdes de complexidade descritas a seguir. * * 1. f(s) = 00). Algaritnos de emmplextine Ov ‘ 3 de compleiae O() so tos de comple: Nasa, dln ss eas Se 2% Sn) = Otbg), Um sgt de : sgn de complexe Olog)éco dcome Dlesinde Togrtniea Hse tno de maga sop tee So alot gue riven um pricoa tact ae rn, no ee et ene Sno mexor do que se cantons grande, Gea nh do logustne 6 2 ogy = 10, quado m 61 mio, logan = 20, Para sa wd an cor usa ae Iti toes an Taine 3 flr) © O(n), Um algoritmo de complesdade O(n) ¢ dito de eomple- xidade linear. Em geral, um pequeto trabalho ¢ realizado sobre ead lemento de entrada. Essa ¢ a melhor situagéo possivel para um algoritmo ine tem de processar n elementos de entrada ou produzit n elementos de salda. Cada vez que n dobra de tan i ‘atta, Coda ver quan dobra de tamanho, a tempo de exeeagin tam 4. Se) = O(ntogn). se tempo de exscio ocome tpeanente em algo "tos que solve umn problema gusbrandoa em problems ieaote resolvendo cada tm deles independentemente e depois juntando as sola, g®es. Quando n 61 milla ea base do logan ¢2, noon 8 coc de 20 naldes. Quando m 62 mies, mloggn ¢ cores de nal mais do que o dobro. “pene Cop tnvoducso a7 Fn) = Ofn2). Um algoritmo de complexidade O(n?) & dito de comple- Zidade quadrética, Algoritmos dessa ordem de complexidade ocorrem Zhanda of itens de dados so processados aos pares, mits vezes emt ua diel dentro de outro, Quando né ri, 0 nimero de operagies € ds order {ie 1 milhdo. Sempre quen dobra, o tempo de execugio multiplcado por {f Algoritmos desse tipo sio ateis para resolver problemas de tamanbos relativamente peuenos. fn) = O(n), Um algoritmo de complexidade O(n*) € dito de com- plexidade edbica, Algoritmos dessa ondem de complexidade sio tteis Spenas para resolver pequenos problemas. Quando n @ 100, 0 nximero de operagoes € da ordem de 1 milhio. Sempre que n dobra, 0 tempo de texeeucao fica nultiplcado por 8 ‘F(n) = 0(2"). Um algoritmo de complexidade O(2") € dito de comple- Xidade exponeneial. Algoritmos dessa ordem de coumplexidade geral- mente nao sio iteis do ponto de vista prético, Eles ocorrei na solugio de problemas quando se usa forga bruta para resolvé-ts. Quando n 6 20, 0 tempo de exeeugia é cerca de 1 milhAo, Quando m dobra, o tempo ‘de exectugio fies elevado an quadrado. {f(n) = Ofn!). Um algoritmo de complexidade O{n!) € também dito de ‘amplesidade exponencial, apesar de a complexidade fatorial O(n!) ter comportamento muito pior do que + complexidade O(2"). Algorit- ‘mos dessa ordem de complexidae geralmente ocorrem na solucio de problemas quando se usa forga bruta para resolwélos, Quando n 6 20, 201 = 2432502008176640000, um niimero com 19 digitos. Quando 7 6 40, 40] = 817015285247807734345611269596115804272000000000, um mero com 48 digitos. Para ilstrar methor a diferenga entre as classes de comportamento assint6- fico, Garey e Johnson (1979, p. 1) apresentam a Tabela 1.3, Bssa tabela mostra 2 ranio de crescimento de varias fongdes de complexidade para taznantios dite ees den, em que caa fungio expressa o tempo de execucio em microssegundos ‘Um algoritmo linear exeeuta em um segundo um milhao de operagoes. Outro aspeeto interessante 60 efeito cansado peto aumento da velocidad dos ‘computadores sobre os algoritmos com as fungdes ce complexidade citadas ante- lormente. A Tabela 1.4 mostra como um aumento de 100 ot de 1.000 vezes a ‘elocidade de um computador atual influ na solugio do maior problema possivel de sor resolvido em un hora, Note que wn aumento de 1,000 vezes na velocdade de computagio resolve am problema dea vezes waior para um algoritmo de com- plexidade O(n), enquanto um algoritmo de complexidade O(2") apenas adicions ddez 20 tamanko do maior problema possivel de ser resolvido em una hora Um algoritmo euja Fangio de complexidade € O(c"),c > 1, € chamado de algoritmo exponencial no tempo de execucao. Um algoritmo caja fungio de complexidade & O{p(n)i, em que p(n) & um polindmio, € chamado de algoritmo 18 Proto de Aigrimae Tabela 1.3 Comparacio de viriasfuncSes de complexidade ao > seeusto [WT ar | 00001 [0.00008 [ 0.60008 | e,00004 | v,00008 | 0.00008 ‘9.0001 |"0;0004 |"@.00n0 | 0.076 | o.0085 | ooae nt | e0or [0008 acer | ~oee | ons Toate nif ot [a2 [bes [ay] aa] aa z= | oo | a faze laa sar on * [min | dias | anos |e sv | 9080 [as [65 | agss Pao" | aoe S| min | anos | see. | ste. | ote Tabela 1.4 Influéncia do aumento de velcidade dos computadores no tamanko t do problema [ FERS a] Camtadr | Campatador | Compatadar custo tual | 100 vexes | L000 vexem ae tempo mais rapido | mats rio ry 7 Tort, 10007 ® 4 Wt 81.6%, 2° 8 46% 10t, fa u 6.6 olinomial no tempo de execugio, A distin ‘nos torna-se signiicativa quando o tamantto do problema a ser reslvido cresce, onforme ilustra a Tabela 1.9. Essa é a aio pela qual na pritica algoritmos Polinomiais sio muito mais ateis do que algoritmas exponencinis iio entre esses dois tipos dle algorit- Os algoritmos exponenciais sio geralmente simples variagées de pesquisa exaustiva, enquanto algoritmos polinotniais sio geralmente obtidos mesiante o entendimento mais profindo da estrutura do probleima. Um. problema ¢ come, raclo intratével quando ele ¢ tio difci! que néo existe um algoritmo polinomial bara resolvé-lo, enquanto um probleana é considerad bem resolvide quando existe lum algoritimo potinomaial para resolstto, Entretanto, a distingio entre algoritmos polinomiaiseficientes e algoritmos ‘exponenciis inefcietes possui vrs excegies, Por exemplo, unm algoritiso com funcho de complexidade fn) = 2" € mais rapido que um algoitino gn) ~ n°, para valores de n menores ou iguais « 20. Da mesma forma, existem algoritmos ‘"xPonecils que so muito ites ua pratica. Por exempla, v algoritano Simplex Capt ovodisse 19 mpo exponen pt 0 por anc ies yon snplesiade d np spon En, 179), me exit rh ra 30 Simplex no ocorram com fre neem cm odo lz Snes no on oe Lei mss nan i ae Condor mo exemple poe uel vane ee sitar n cidades de tal forma que sua viagem inicie ¢ termine sean ‘Bits cca dade ee ser vst una ve. Supond qe spe ca se ia ete duas sides qunsquer, 0 problema 6 encontrar & men aa ijn pn Wt a ge ' 3 tea exemple anterior para quatro ade, 0654 0 A Pie US ns aden distant eae das edad. 0 oreo eho para ool, cjo pres otal em dita m4. Se yrrida em cada rota envolve n adigSes, entiio o nGmero total: feat “ ete etn " siderando um computador capaz de executar 10° adighes por wen no wane is Sateneates wa cer ye aa oe eens Steen rr andar vee el Figura 1.5 Problema do caixeiro-vajante. 20 Pris de Agios 1.4 Técnicas de Anal 3 de Algoritmos A determinacio do tempo de execugao de um programa qualquer pode se tornar jum problema matemético complexo quando se deseja determinat 0 valor exate iia fungao de complexidade. Entretanto, a determinagao da ordem do tempo dle execugéo de um programa, sem haver preacupacao com o valor da constame envolvida, pode ser uma tarefa mais simples. E mais facil determinas que o uitnere ‘sperado de comparacies para reeuperar um registro de um arquivo wtilizando Pesquisa seqliencial ¢ O(n) do que efetivamente deteriinar que esse simero ¢ (n+ 1)/2, quando cada registro tem a mesma probabilidade de ser procarado, A anélise de algoritmos ou programas utiliza técnicas de matemética dis- 1, tenham sido = gubetituldes por formulas contendo apenas T(2}. No caso da Eq) temo Se considersemes 0 nimero de comparag@es como a medida de custo relevante (no ‘aso representads pelo nimero de vezes que a linka (4) do Programa 1,5 ¢ exec, fauda), entao o programa faz (n?}/2—n/2 comparagoes para ordenar n elementos Se considerarmos o nimero de tracas(linhas (6), (7) ¢ (8) do Programa 1.5} como wma medida de custo relevante, o programa realiza exatamente n~ 1 troeas, Se existirem procedimentos recursivos, enti 0 problema deve ser tratado fe forma diferente: para cada procedinento recursivo € associada uma fungao de complexidade fn) desconhecida, onde n mede 0 tamanho dos argummentoe ara o procedimento. seguir, obtemos uma equagio de recorvéncia para f(), conforme seré mostrado no exemplo a seguir. Uma equagéo de recorréneia ¢ uma maneira de definir uma fungao por uma expressio envolvendo n mesma angio, Mn) = n+T(n/3) Uo/3) = n/3+T(n/9/3) T(n/5/3) = 0/3/38 + T(n/3/9/9) Exemplo: Considete lgrimo mostido no Programa 1.6, O agoitmo igpe: Clon on elementos de um conto ede alguna font, io pre deseeey 2/3 dos elementos ¢ entio fazer uma chamada re * tans, ecursiva sobre 08 1/3 elementos ® Tio f9f-—-J8) = mf S/B-- (+ T(0/ 9/9/19) ne F Aisionando lado lado, obteres: fn) = me nef) br (0/92) = (2/8) +o + TOI 9/3 /9). ro Tip) =n n- (1/8) +m (1/98) tC) ee casper Basa oquacio representa a soma de uma série geomeétrica de razio 1/3, multi- “ else | me Clemente! © termine F blicade por ne adicionada de T(n/3/3---/3), que € menor on igual al. Se (3) para cada wn dos n elementos “Inspecione elemento’; F— Asprezarmos o termo Tin/3/3---/3), quando n vende para infinito, (8) pesquisa (a3): = , ayaa =n Tin) 2 Proiet de Algrtmos Se considerarmos o termo T(n/3/3/3-- /8) ¢ denominarmos 2 o niémero de subs ivlsdes por $ do tamanho do problema, entio n/3° = 1, em = 5°. Loge, logy n. Lembrando que T(2) = 1, temos Tn) EH TG 9S + See oe 1 2 Logo, o Programa 1.6 € Ofn). A Secio 2.2, no Capitulo 2, estuda algoritinos 150 Java O objetivo desta seco € apresentar apenas alguns aepectos da linguagean Java, facilitando assim a leitura deste livro para as pessoas pouco familiarizadas com essa linguagem. Os programas apresentados no decorrer do livro usatn apenas ag caracteriticas bisieas da linguager, 1.5.1 Programacéo Orientada a Objetos A programaciu urientada a objetos nascen porque algumas linguagens pro- cedimentais, como Pascal ¢ C, se mostraram inadequadas para a construcae te Drogramas de grande porte. Existem dois tipos de problema 1. Falta de correspondencia entre o programa e o mundo real, Esse problema ‘std relacionado com a modelager do mundo real. Os procedimentos inn. plementarn tarefas, enquanto as estruturas de dados armazenatn informe. ‘0, mas a maioria dos objetos do mundo real contém as diuas coisas, © Pinel de controle de um forno elétrico, por exemplo, eoutém tarefes como ligar desligar 0 forno, mas também armazena informagio sobre s te. eratura corrente e a te fe controle do forno elétrico em uma linguagem orientada a proce ‘05, 0 programador eria dois procedimentos, ligaForno e desligaForno, mas também duas varidveisglobais, temperaturaCorrente (fornecida por jum termémetro) ¢ tempernturaDesejada (fornecida pelo usurio). Cla. asnente, 06 dois procedimentos e as duas varisveis globais nfo formam uma unidade. Organizagio interiia dos programas. Era linguagens procedimentais os Programas so organizados por meio da divisio em procedimentos, nas fica dificil encontrar uma boa solugio para o tratamento dos dadon, Ge ralmente os dasios sio locais para um procedimento particular om sto Slobais e, portanto, acessiveis por todos os provedimentos. Nao existe ‘uma maneira flesivel para diaer que determinados procedimentos pode ap. trodugso 25 scr i tno, a ili aa ae jlemas quandc muitos procedimentos precisam acessar os sm da Masse poral demos os ea sa’ Emsan asa tne erate a cs provedinen do progr,» ane cont ona ae aor Seesro oa ogacnh Js do mundo tal que grams ore a objetos permite qv objosd : emp sata att econ oe en | Gaile em classes. Esse estilo de programagio ¢ diretamente suportado pelo con- | Seo deci en Ja. Alt dope taba por ees de vis Foeanee eee ts um program, even assim o problema decito no paral fee ado on co conceten fame asinguegee ot “das a objeto e serio detaliados ua préxima secao. 4 objets maior do que nguagem Jv possi um gran de orlentagio antes Se apna de sho Sr totalmente orienta a objetes como Tinguagem Smalltalk, na qual tudo 6 objeto. Java nio € totalmente orientada a Fe gun por quan deen ran aitido agin tipo primitives ‘e suas operagies, S i éo para os problemas relacionados eeteepe tener ete ios nos referie « procedimentos como métodos. Ura objeto contém mftodos | € variaveis que representam seus campos de dados (atributos). Por exemplo, 0 coneito do biel rave bem os problemas apontados nterionente feral, um objeto nowe contest no somente ve aproxima mito mas bjt do mun rel, como também elimina o problema clsdo por vr JigaForno podem acessar as varidve slobais. Os métodos ligaForno ¢ desligaForno : turaCorrente © temperaturaDesejada, mas elas ficam escondidas de 26 Prieto de Agovimes Classes O conceito de classe nasceu da necessidade de se criar diversos objetos de um ‘mesmo tipo. Uma elasse ¢ uma especificacio para um ott mais objetos. Dizetnos que um objeto pertence a uma classe ou, mais comumente, que é una instdnele de uma classe. © Programa 1.7 apresenta a classe PainelDeControle. A patavta have elas introduz a classe PainelDeControle. A palavra chave void é utilieade 1a definigio dos métodos ligaForno e desliaFomo para indicat que 06 inétedos no retornam nenhum valor. A seguir aparece os campos eos métodos da claase Programa 1.7 Classe PainelDeControe package capt: lass: PainelDeControle { private float tomperaturaCorrente; Private float temperaturaDescjada: Public void ligaForno () ( // eitigo do metodo Public void desligaForna() { // ebtigo do método Umm objeto em Java ¢ erindo usando a palavra chave new. No momento em ‘que um objeto ¢ criado torna-se nevessdrio armazenar luna variével do mesmo tipo da classe, Na realidade, uma teferéncin corresponde a0 endereco do objeto. O comando uma referencia para ele era PainelDeControle painell, painel2; (ria duas referencias para o tipo PainelDeControle. Os comandos Painell = new PainelDeControle (); ainel2 = new PainelDeCouteoe () tam dois novos objetos do tipo PainetDeControlee armazenam referéncias para les em pained! e painel2 A criesao de um objeto ¢ chamada de Instaneiagao © o objeto passa a ser ima instancia da classe, Apos a especficagao de uma clase ea eriagio de alguns objets daquela classe, outras partes do programa interagem cons om métaiee «dos objetos por meio do operador (.), © qual associa um objeto com um de seas métodos. O corando Paine ligaForno (); diz para 0 objeto paineld ligar 0 forno. Fable class Polinorimo { op. reaaeso 27 repr en ir cn bcc do rag ee 0 ve estendida tem todas as caracteristicas da classe base mais alguma SN cssvdiional, Em Java, a clase base ¢ chamada se upertase Sa a ie subclasse. A heranga permite adicionar caract sm care 118 tra 0 conto de Bengt. Por exompl,a © aoe aru de um clase alse chan Empread © fr tm eamspo de dacos chamado velocidadeDeDigitacao, que néo existe na ees dmpegads, Outroexenplo, una clase Cerente pode também ser deivada Protected Boat at a satarios | public float salario¥ensal () { return salario: . ublic void imprime () { Systam.out,println ("Empregsdo"); } Secretaria extends Bp { vate tnt yeloededeDeDigitarao; , Pee veld imprine Qf System out-printia ("Secretaria"); } pa STAT otha (em is am) Fann ne VT buenos et ublie statie void raain (String |] ares) { Public stati void rain (String) 58) { "Enprguoempregalo Eg setari Seretarin 0s Ena frente ew Geren () fnptegno.inprine (J? seretaria-nprine (); gorente-Impwime () ~_O tratamento de objetos de classes diferentes de uma mesma forma & char a i ses diferentes tem de ser ‘mado de polimorfisme. Para isso ser possivel a8 classes di _Aerivadas da mesma clase base, A classe Polimorfismo no Programa 1.8 ilustra 0 Proto de Atgortmos Conceito de polimorfismo. Por exempl © objeto secretaria fae com que se) Secretaria, enquanto uma chamada idéntica para o objeto gerente chaina 6 me, todo de impressio dentro da classe Gerente, Isso simplifica e torna mais claros projeto e a codificagia de programas. fo, uma chamada do método imprime para Objetos e Tipos Genéricos Umma estrutura de dados ¢ genérica quando 0 tipo dos dados armazenaddos na ‘strutura ¢ definido na aplicagio que « utiliza. Ua forma de implementar este tras de dados genéricas € por meio de objetos gentricos. Um objeto genériee pode ser de qualquer tipo, isto ¢, pode armazenar una referencia parn uin objeto die quslauer classe, Os objetog da classe Object, que ¢ uma superclasse para toda classe definida em Java, possueu essa caracteristica. Si0 os mecanistuss de he, ranga ¢ polimorflamo que permitem a implementacdo de estruturas de dade senéricas © Programa 1.9 apresenta uma estrutura de dados genérica chammada Lista O objeto item ¢ definido como um objeto generico pelo fato de ser une instant dla classe Object. Isso significa que Lista pode ter objetos de clases distintas exe cada item, Essa liberdade de ter objetos de classes distintas em una means lists obrign o usuario a ter que especificar 0 tipo de cada objeto a sr inveridy et cxn {utitado, 0 exemplo Vestibular apresentado na pagina 87 da Segao 31.9 cebe Jistas Iinearesilustra a utlizagia de objetos genéticon, Progroma 1.9 Detnizo da estrtura de dados Liste utiizando objets genéricos package cap! objetogenerica; Public class Lista { Drivate static class Celula { Object item: Celula prox: Private Celula primeito, ultimo: Para evitar que o usuario da lista 4 ser inserido on retirado da lista, lum mecanismo de definigén de un na definigéo de um parametro de tip. utiliza a estrutura de dados, de daddos sejam todos do mes tenha que declarar 0 tipo de eada objeto a Versio 5 da linguagem Java introdazin ‘ipo genérico. Um tipo genérico consiste 10 que deve ser espocificado na aplieacio que fazendo com que os itens armazenaitos na estrutura smo tipo, © Progeama 1.10 ihustra a defi inicio da estrutura de dados genérica Lista por meio da especificagio do paramets #0 de tipo T. Agora o objeto item tem de ser ja chamado 0 método de impressio da classe amt nvoducso 28 seri forncido quando wm objeto da de um tipo genio que do nt i a Peta * mancadoe Por exemplo, para instanciar uma lists “ in _ S indo “Lista lista = new Lista() fa dears conta iizando tines generics Sah tiponsnei: maple clas Liston Puorivate static class ColulocT> { Pr em: Calla» pro sate Calc pimcio, sin; implementa ao or tina objets gentricos pra np Nee rae imhes 6 ilo 3, ao invés de utilizar tipos cen etadatas a pvr do Captlo 3, a GRE SSS. prc whe pn ante «compa (Grde J ngugent Sv steriones Verso 5. — Asobr Be itece cuando determinado objeto e comport de diferentes for Eien eecagn un in joc. Na sobrecarga wm iden~ ot sobrecarga € umn tipo de polimorfismo ad hoe. re cm ide | ad: marx tena compte nan. © Progra en oe mplo de sobrecarga do método salarioMensal da classe | rads so Progen 14 om gue dscns air de sli Bors Noe que o melo 0 1a 1.11 possui uma assinatura ceo ste oe po at ference da esinaturaapresentadn no Programa 15, Ino €o que crac Sorc down mito Programa 1.11 Métado da classe Gerente sobrecarregado Public float salarioMonsal (float desconto) { feturn salurio + boas ~ desconto; 5 Prieto de Algaitmes ‘Sobrescrita Programa Principal © Programa «ria uma conta com um saldo hamado AplicacaoBancaria,java, 12 modela uma conta bancéria tipica e contéun ox seguintes passos: ia. imprime o saldo, realiza um depésito, reali cx ua cont coma liza um depésito,reaiza Ssaque ¢ imprime o wove saldo. O programa esta armazenado em umn arquivo, Programa 1.12 Programa AplicasaaBancaria. java package capt: class ContaBancaria { private double saldo: Publi ContaRanern (dublesaldutnicia saldo ~ saldolnicial ama , Public void deposito (double valor) { rable = aldo = waar: Public void saque (double valor) { saldo ~ saldo ~ valor t | ace deren ak ro il ge) Depa dn vent aldo); ia (200.00); 0, *)s (Cap 1 reso 31 beste duas classes no programa AplieacnoBancariajara: ContaBancaria ancora. A classe Condabancaria tem wm campo de dados chamado sees mttodos chamados deposito, saque ¢ imprime, os quais sodelam a3 Ge adicionar um valor a0 sald, etirar um valor do sado © impr 0 do saldo,respectivamente ‘Para compilar o Programa 1.12 a partir de uma lina de comand em MS- DOS ot Limo, fazemos: javne -d -/ AplicacaoBancarie java para executérlo,fazeros: {java capl-AplicacooBancaria “Base comand diz paraointerpretador Java procurar na classe AplicacaeBancaria. do pacote cap! um método chamada main. A execucéo do programa comeca ‘po inicio de main. © método main cria um objeto da classe ContaBancaria Ermarenando unva referencia na varied contal. O objeto eriad @ inicializad ‘tom o valor 200.00, que correszonde ao saldo de abertura da conta. O método ‘Sytem out print inptime acadeia de caracteres que aparece como paraancteo do Inttodoe osaldo& impresso po metodo contat.imprime. A seguir © prograsia Tealiza um depdsito e wn saque em contal,imprime o sen sao e termina Constnutores ‘Acclasse ContaBancaria tem um método especial denominado construtor. ‘hamado automaticamente sempee que um novo objeto ¢ criado com o comando new. O constnitor tem sempre o mesmo nome da classe. No caso do Pro- frame 1.12, 0 construtor ContaBancaria tem um parametro que & usado para ‘realizar 0 depdsito inicial quando a conta é ctiada, Motificadores de Acesso Public, Private, Protected e Static (0s modificadores de ncesso determina quais outros métadas podem neessar tn campo de dados on um métods. Um campo de dados oa ua método que se ‘precedido pelo modificador private pode ser acessado somente por métodos 4 fazem parte da mesina classe. Na easo do Programa 1.12, campo de dados saldo Ilo pode ser acessade por comundos de main, porque main win & um método da ‘uu papel especial. Note ca que a classe @ visivel ‘capl) em que ela foi definida. Alem disso, ifieada por extemamente ao pacote (package feada arquivo de um programa Java sé pode existir ume classe Public, eo nome do arquivo deve ser o mesmo daclo i classe. UAHY [eae 52 Prot de Agrimas Um campo de dados ow um metodo que seja precedide pelo modifieador pus bile pode ser ncessado por meétodos de outras classes. No caso do Programa 112, todos os métados da classe ContaBancaria sio publie © os comandas em main podem usar os métodos deposito, sague e émprime. (Os campos de dacios de uma classe sio geralmente feitos private e os métodos ‘sto tomados public. Isso protege os dados de serem acideutalmente modifcades Por outras classes. Qualquer entidade externa que necessite acessar dados de wma classe tem de faré-o usando win método da mesma classe © modificador protected ¢ utiizado para permitir que somente subelasses de uma classe mais genériea possam acessat os campos de dados precedides com protected. No Programa 1.8, 0 campo salario da classe Emprogado pode ser ‘cess a patir das suas subclasses, como fa feito na classe Gerente. No entanto, cle nio pode ser aoessado a partir do método main da classe Polimorfismo, pois festa classe nfo é uma subelasse da classe Empregado. ‘Um campo de dados ou umm metodo de uma classe declarado como static Dertence & classe e nao is suas instancias. Isso significa que somente um campo de fades ou um método seré criado pelo compiladar para todas as instancias, Além. isso, 05 métodos de uma classe que foram declarados statie operam somente sobre os campos da. classe que também foram declarados static. Se alem de statie método for declarado public sera possivel acessé-lo vom © nome da classe 6.6 ‘operador (.). No Programa 1.13, o eampo de dados total pertence somento a clasce A, enquanto o campo de dados media pertence a todas as instancias da classo A, Ao final da execucdo do método main, os valores de a.totale b.tota sto iguais a 7, enquanto os valores de a.meiia e B-media sio iguais a 5 e 7, respectivamente, Programa 1.13 Exemplo de utilizaet do modicador static - package cap; lass { Public static int total | Public int snedia; } Public class Bf Public static void msin (String |} args) { Aa =mew A(); a.total = 5; a.media ~ 5; Ab=new A(); b-total = 7; bimedia = 7; Uma interface em Java é uma classe abstrata que nio pode ser instanciada, Os métodos de ume interface devem ser publie ¢ somente as suas aesinaturas opt nvoducso 33 Jan inetave & sempre implementada por outa case. A i es gra provers copotcaie de un conpormento ce Shjatos. Por exempo, a iterfare pete que 0 Ja zentrcoe oslve om sis don mts fe © ipo de dds da dave de aed com sas sees an ent 30 da chave de urn registro Sesion 9a ih fe iros pode ser al- eta emu te nit et nen eae zee Programa 114 apes ta wero general do Progra bc 0 me nel dnp ate ome 9 Fh ns aa teen do {L44 Age pra encom 0 cag de maior chav independ chore canis | pubic cise Ns [Pepe tate Lem ax (lem v[]. Hat a) ( rer ree HS mz 844) a (omcomparn (elif) < 0) max = v1iT5 | return mac; Para permitir a genetalizagéo do tipo de dads da chave é necessirio eriar a “interface Item, conforne ilustra o Programa 1.15. A interface Item apresenta -assinatura do metodo abstrato compara Programa 1.15 Interface para um les Aneta em cnet pla classe Meaiom aprosetad no Po “grama 1.16, E dentro da classe Meultem que o tipo de dados da chave € defiido _ fate 0 mtzodo compara ¢ inplemestade, O metodo compara ¢ uit pate omparer dois regis « eb etormando um vor menor do que 20 s¢ a , e um valor igual a zero se a = 0 Programa 1.17 ilusea a utilizagio do método compara apresentado no 116. Not gic pra atrium chet da ae eae lor ‘maximo retornado pelo método mar do Programa 1.14 € necessitio Fazer ums a. trodusso 35 Projet de Aes tednir © pate de uma classe on de una interface basta utilizar a eae weguida pelo nome do pacote. Por exenpo Programa 1.16 Classe Meuttem que representa um registro package capt import java.io. Public class Meutvan implements Item ( Public int chave. / outros componentes do n Ss seu rattan Se ere stro public Meulten (int clave) { this.chave public int compara (Item it) { Menem iterm = (Mulan) it if (this.chave < item.chave) return — else if (t return 0; have: ) shige capitan; tra de una case defini em outro pact realzada ai el, ara ar a evtraton de dn Liste aay de trang (ide Cap 3) win eo sogsinte comand ort capS.asranjo Listas is-chave > item.chave) return 1; y conversio do tipo Item para o tipo Meultem, conforme ilustra a penditima link ilizar determinada classe de um pacote sem importicla, Para do método main do Programa 117. ibn posstvel ulizr det sco basta prefixar o nome da classe com o nome do pacote durante a declaracio ‘vail. Por exeruplo: Programa 1.17 Programa para testr 0 metodo que encntia © registro de maior chave independentemente do tivo da chave “ “ = package capt Public class EnomteaNtax { Public statie void main (String|] args) ‘Meultem v{] = new Meum [2] ‘ {Ol = new Maem (3): [1] = mew Meat (10): Maule max <= (Mentiem) Macarne(v, 2 System.out.printin ("Maior chave: * +'max.chave); [srr it ts ve prio dee io do modificador public. Por Eni ¢ proc declrslacomo pili or me ie plo nce Bd Pron 18 post erp fa do pate ap 0 Te Pstta Ia’ chce Aso poe se ada or outa Clase lo package ni ¢ colocado no Toda classe pertence a um pacote. Se 0 comando pat a ig nt, nto Tov adsona alas daqele cig one no go chai pacote default Quando um campo (ou método) de uma classe nio ¢ prefixado por weston Bs molficadores private, protected ou public, dinse que 0 campo (ow ms do) possui vsibilidade default ou de pacote, o que significa que qualquer obi ‘uma classe do pacote pode acessar diretamente aquele campo (ou metodo) Pacotes A huguagem Java permite agrupar as lasses ¢ as interfaces em pacotes (do inglés, Package). Os pacotes sio cunveniontes para organiza a jm conjuato de programas de outras bibliotecas de classes. 0 nso de panies evita colisbes entre noms de classes desenvolvidas por taa equipe composta por ‘muitos programadores “ posta pi Bs Ces do ne mamas an opp pe noes Seems “ = a * “using ¢ utilizada para se ter acessn As classes definide ‘lecaracio da classe Getua, que ¢ intema a classe Lista. Class interment Tae Stes para evter confitos de nomes na implementagéo de estratures ae dados, como apresentado no Capitulo 3. Programa 1.18 Declara¢so de uma clsse interna Public class Lista { / Codigo da elosse Lista Private clase Chile | / Siti css Cet Os campos « métodos declarados na classe externa podem ser ‘eessados dentro da classe interna, mestno o declarados como protected rates emante: © contrério nko ¢ verdadero, Sornente os campos on mete Diiblicos da classe interna podem ser accsoados ua classe externa As clases externas s6 podem ser declaradas como prilicas out com visible dade de pacote (default). J6 as classes intemas podem também cer qualiienigs 0 Objet0 this Cote nstancia de wma clase poss um varsvel especial chamatla this, que siemantmi rferéncia pata a propria insincia. Iso ¢ necesiro ta algunas stuadbes ara resolver questOes de ambigiiade. © Programa 1.19 lustre me aendanae ual © uso do objeto this se faz necessério. "Note que o parametne aldo do método alterSaldo possi © mesiio nome do eatmpo de ition naa da clase Conia. Pata diferenci-los ¢ necesasioqualificar 0 campo da mtanag com 0 objeto this Excecies As exces so eros ou! nnormalias que podean ocorrer durante a execugéo de um Programa, ‘ais como @ divisio por ato, aindispouibilidade de meméria principal isto ®, pade-sedeclarar Feaste dentro da declaragio de outta classe. O Programa 118 ilisteen | cap tiosigso 37 Programa 1.19 Utiliza¢30 do objeto this vate double nl: a gd aterasaio (double sald) { this.saldo ~ aldo} simples para trtar uma exon 6 eibir wna menage sai oso eterna pra qvem Sasi o8 toa pga. doo ero cori sar pga, oman try tna unn exci oi eels rt pr came thw coe rsh ce us tne dace Btn cnn tow Bis 6 objeto yresenta @ excegdo € o envia para ser capturade pelo Mt decadgo que vs atr excogia O comand each capa a exceio © ech (Exception obit) { System out-printin ("Erro:" + objeto.getMfessage()); ee lagem uma excegio é separar o local nln eer rs to pi © ec ear Ea ol a pig inn ee pc Sa aes a 38 Projet de Agromes Programa 1.21 Tratamento da excecso om lca diferente do local onde ela occrre ft divisao (int a, ine b) throws { (== 0) drow new Exception (*Divisao por zero"); return (3/6); Considerando que o métoda divisao esta inser Divisao, 0 trecho de cédigo pode ser criado no método: isao d = new Divisao (); try { divisao (3, 0) featch(Exception objeto) { System.out.printin("Exro:" : tobjeto.geeMessage()); Saida de Dades 8 System.out print (var); System.out.printin (var); método print deixa o cursor na mesma lint para a préxima linha de saida, diversas variéveis separadas por contém 9 valor 27: System.out.printin ("Data do evento = "+ datajs fentdo o resultado inapresso serd: Data do evento = 27, Entrada de Dados ‘Todo programa em Java que tenha leitura de dados tem de incluie 0 eomando import java.io.*; 1 inicio do programa, ido em uma classe chamada ‘baixo iustra come capturar 0 objeto excegia que 4 pos primitivos ¢objetos do tipo String podem ser impressos com os comandos tha.e © método printin move o cursor © argumento de cada um dos métodas pode ter sinais de adigao, Por exemplo, se a variével data Cap. iecuese 38 lanes objeto da classe fe a entrada de dados ocorre por meio de um objet sertim rostodo para let do teclado uma cadeia de caracteres terminada com ie String Sting () Urs TOESeeption ( ae acc puting new Inpatient (Sytem ale fer” now Buren (aputSn Ba = er solic 0 eturn s: ceva «extra de um carters & ptr do tela, uma manta 9 EL igen dam objeto da lane String eae outro modo para at» pr crate, No espe bie static char geiChar (throws IOBseepton { wSising s =~ geting (s “return s chart (0s odo harAt da claw Soin rtoraa um caractere da posi expec sjeto da classe String. Nesse caso, o primeiro caractere ¢ retornado, o qual entio & nocesséro realizar wma fo que esta seno ldo 6 de outzo tipo, entio & a do objeto String para o tipo desejado. No exemplo: ublic int. getnt () throws IOException ( P String s— getting; return Integer parsin ()s 10 parselnt da classe Integer converte a cadeia de caracteres para 0 tipo nt. Um método semelhante de nome parseLong pode set ussrlo para converter tadeia de caracteres para o tipo long. 08 tipos prinitivos possuem um mecanismo de couversio semelhante. carp ase ota cm rea cone daca date 16 tipos float ¢ double, Cada tipo primitivo possui uma classe associada, tipo int possui a classe Integer, o tipo double possui a classe Double, 6 de conversio, mas estao além do escopo deste livro, Para mais detalhes, lte o manual dispontvel em http://java.sun.com. lic double getDouble () throws 1OException { «String s = getString () ‘return Double, parseDouble (6); blic float getFloat () throws IOException { String s = getString (); 4 Feturn Plat.parsePloat (s); 40 Prieto de Agriomos Em todos os exemplos nio consideramos a v entrada de dados, Quando o usu dis lun erro de excegio é disparado e deve ser tra de entrada de dados mostrados anteriormente, a vearre © término do programa. Convencao de Codificagao em Java A comunidade de programadores Java adota uma convengio de codificagio em ue os identifiendores associados as classes devem iniciar com letra maitecula, enquanto os identificndores de variéveis © métodos devem iniciar com letta tai, niscula, Mais detalhes sobre convencio podem ser obtidos por mio do link -tep:/ java. sun.com docs codecony /htmal/CodeConv TOC doc htm 1.5.3 Diferencas entre Java e Cy-+ Esta sogio no pretende cobrir todas as diferenge sas mostrar as principais caracterfsticas lingnagem C++. as entre Jaya e C-}-+, mas apen que diferenciam a Tinguagem Java da Auséncia de Apontadores A maior diferenga entre Java © C++ 6 a auséncia de apontadores em Java, Na twalidade Java nao utiliza apontadores explictamente, mas apontadores esto ‘sempre presentes na forma de referencias a posigies de memdria. Neswe aspecto, poderfamos dizer que quase tudo em Java & um apontador, embora a atitmética ‘le ponteiros nao esteja presente na nguagem, como ocorre em C44 © primero aspecto a considerar ¢ que Java trata tipos de dados primitivos, {ais como int, double ¢ float, de forma diferente do tramenta datlo'» abjetos Por exemplo, consideremos os comazdos int varinvellnteira; ContaBancaria.contal; No primeira comando, uma localizagéo de meméria chamada variavelMnteire pode fer um valor numérico tal como 257, assumindo que o valor tenbia sido coloceds '4 Entretanto, a localizagio de memnia contad no contém um valor do objeto ContaBancaria. Em vez disso, ela contém 0 enderego de um objeto da classe ContaBancaria que realmente esté armazenado em algum outro ligar da meménia, ‘Logo, @ nome confat ¢ uma referéucia para este objeto, nao o abjeto propriantente ito, Em Java, uma referencia pode ser vista couno um aportador com a sintaxe dle una varidvel. A linguager C++ tem varisveis referencia, mas elas tem de ser ‘specifiendas de forina explicita com o simbola &. rerificasio de erros nas rotinas de inita a cadeia de caracteres de forma errada, ado adequadamente. Nos exemplos de uma exeegdo causa opt nvodurse 8 un teens gli acon a operadores (= Se Scams an stra eae mi aa te 2 on sae ee ee cn tl tm Jo as State tanko conta qpanto contad se referem ao mesmo objeto, Assim, apos ° jo acima, 0 dois comandos fa execusio do comando acima, a sam (10.00) asa 10 ston cw RIO db i ae Ct, in fps pir di den hie mont ceo tr i ojo separa ent copies en cao separadaent, por Ge sao nao & cap de elisa area Alocacio Dinamica de Moméria to cui allan prado mm, ate, neem Cover rat teas 0op cr toner ttc oc gt Se ee tan, Osos ContsBecara cone cae etDanen iam um og cot dip Contac. . lip do aorta cSt oe na ee tuner pave manpaar eee te ial esta See ee enn ete — cs rt pt 1 Crea mani sod po operator new ten wranatrq n taeaian perr dt." Jove, Bberagio de menéria €realizada pelo sistema ae rete soe ee sy ele ueass ne noe a ‘mais referéncias, a meméria Sniper le we we ny meni eae ee ee acta egy dm é eonbecd como eoleta de lixe (do inglés garbage callection} 2 Projets de Agree op. nrodegse 48 Parametros caso de objetos, om C++ 0 operador diz se dois objetos contém 0 mesmo sr Java, o operador de igualdade diz se duas referencias so igus, ito €, ppara.o mesino objeto. Por exensple DoFuncionario funcionariol = new CargoDoFuncionario ("Gerente"); E DoPuncionario funcionario? ~ funcionariots jonariol == furcionario2) rout printin ("As referéncias so Iguais"); Bim Java, os objetos so passados Be Jo chino to ara métados como referencias 108 objet void metodol () { ContaBancaria conta — metodo? (conta): new ContaBanearia (100.00): Pitt to oa a, para verifcar se dois objetos diferentes contém 0 mesmo valor € nooes- ae ttoda uae da claw Obert. Em Java, ton on clos so Sete derios da ase Object. Por exempo: “obo ncionstofuncinariol = new CargoDoRunconaio ("Gent") Der uncon new CorgeDoFuncinario (*Gerente"); ifoctonario! equals funcionns2)) Epo ov prtin (Valores so iis) fou os valores do ol objeto sejam comparados& nce anbrscever ln dase CaryoDoFunconario. O progranodor dev walt 4 He a cabelser a Tlagaa Ue igusliae etre dos blend clase nari, tl no €conhcida¢ prion as ernie primitives di tal ita? referem-se ao mesmo objeto, Entretanto, pee we le dados em Java sio sempre passados Por valor, uma nova ¥ ous do node ah th santas ee Em Cit no espe void metodol () { ContaBencaria contal (100.00): metodo? (eontat) Jord moto2 (ConaBanerin conta) { conta? & um novn objeto copiado de contal Bum C++, para passar eho grantes evita do método utiliza-se 0 Ne ona “ Ne anes estan ocsto de copia o objeto dentro m C++ ¢ possivel redelinir operadores como +, —, #, =, de tal forma que eles ‘comportein de maneira diferente para os objetos de uma classe particular. Em metodo) ContaBancariacontat (100.00); tuetodo2 (eontal) Tord metodo2 (ContaBancaia Leont2) { pe imitvcs de Ondon f questdes dle eficiencia foram mantides diversos tipos primitivos de dados. ‘Tabela 15 apresesta o tipos primitivos de dados em Java, As varies rads como um fipe priativo em Java permitem aces direto ao eu valor, inte como ocorre sm C+. Todos os outros tipos nao mostrados na tabela g elasies (por exemplo. String) Em Java, 0 tipo boolean pode asvumit os valores false on true, enquanto i+ os alres inten Oe 1 nepeesentan flo e verdadero, espectivanenite O tipo byte nio existe em C++. 0 tipo char ¢sem sina ¢ usa dos bytes para omodar a reprsentacio Unicode de caractees, 0 qual acomoda caracteres fercionas de inguas tis como chinese japonts. O tipo short tem trataruento ated em Java e C+. Em Java, 0 tipo dnt tem sempre 32 bis, enquaato em ~+0 tipo int varia de tamantio,dependendo de cada arqutetura do computador conta® refere-se ao objeto conta No ca de pos primitives de dads, tao em detent (=) seas cho eae C8 ear ipnnde is Slo igus, isto 6, so elas contém © mesmo int varloteirat = 33, int varinteira? = vartnteiral; if (varlateirat <= varIntcirad) System.out.printin ( "Valores sap iguais"}; op. nrodugso a8 46 Pris de Algoemos toro de Strovs sts eros sobre 2 Tinguager C+. 0 fi : yas wm ti ead lng, Pa sis naar livro de Deitel e Deitel (2005b) @ mais adequado. tica da Tinguagem 0 lnerval de valores ves Le nan es ane ae Gn i ents poten ose m C++ tbe m/v 18.0/d0c pA agg je cae pattdo Gomncs STL Standard Tet Fe a etago da blot STL poe er arsida or me 2, 228.372.096.854.775,808 a +9.228.372036.854.775.07 10° a 10°; 7 digits signifcativos 20° 9 10°; 15 digit significacivos Gouble nao necesita de sufso, O tipo long us 0 sufi L. (por exemplo, 331); ‘quaisquer outros tipos inteitos nio necessitam de suffxe __ a)algoritmo; _b)tipo de dades; 6) tipo abstrato de dads. D 5 E oitca dizer que uma funcio afm) & OCf(a))? ; Gort om ln cet tego prec pas isias sobre o conceit de agoritmos,estruturas de dads programas Foden ser encontrados em Dab, Dijkstra e Hoare (1972), Dijtstre (19¢1e 1976), Hoare (1969), Wireh (1971; 1974; 1976}, teat mites eros que aprosentam seins panna tempo de execu Lense tgatans, Knuth (1968; 1973; 1981), Stanaee Mesllister (10%), Conon Ueereon Rivest e Stein (201), Manber (180), Horowit e Sains (1079), Grae € Kouth (1982), Rawlins (1991) sio alguns exemplos, 3/34 O(n Prove que f(n) = 1? +22 +--+? @ igual a n°/3 + O(n). 7 sia, eS ur so verdadltas ou falas e justifique a sua ordeulos entre outras. Knuth (1968; 1975; 1981), Graham, Knuth s Pang, adique se as afrmativas a seguir sho verd Tes 289) Aho, Hopcrft e Uiman (1974), Stanat¢ MeAllstr (197%) Censor, Uagimean Rivet e Sten (200), Manber (1980), Horonitze Sait (19%), Ores ¢ Kath (1982), Rawlins (1901) slo alguns exempos. Artgus gens afar 76), Weide (1977), Lucker (1980), Flajolet Ofvln)) = Fn) + a(n) = Olw(n) + (0) = O(u{n)) e-9(0) = O(w(n)) = Fm) fun) = (0) Sejam duas fungSes nao negativas f(n) ¢ g(n). Diz-ve que Ll) = (a(n) s¢ fin) = Of9{n)) ¢ a(n) = O1F(m)) Mostre que max(f{n), a{n)) = O(F(n) + 91). sara @borme quantidade de livros sobre a Hnguagem Java, que fot epenvolvda pea SUN Microsystems, tendo sido langada em 1088, Une icignn Facts a lnguoger, bem como aubientes de desenvolvimento de progance roe Jeeta no site java.sun.com, O lveo de Deitel Deitel 2005} mecca, tums descris2o precisa e ap mesino tempo didatica da linguagem Javn, =m B19 Hn) = On +40 repctvamente, Determine nt 6s valores de n pertencentes ao conjunto dos nimeros naturais par ‘menos tempo para executar do que B. Cap 1 nvosucso 7 46 Projet ee Agsitmes oo. ste um algoritmo que realiza a unificagio da lista em tempo O(n) noe bad if lista em temps ‘ ate umn algoritmo at apler © mio eo minim de mn conjunto contendo n slementos, Ise algoritmos para valores sfcietemente grandes de n, gerand case de nec 111 Se dados Bn ndaeros distintos dstribnidos em dois arranjs com n clemento Ae B ordenadios de maneira tal que (Carvalho, 1992) All> A8}> AB) >> Aine BO] > Bp > B13) >.> alah © problema é achar o n-tsimo maior nimmero dentre estes 2n elementon 49) Obtenta unm limite infer resolver este problema ior para o nimero de comparagées necesséras para 2) Apreente um slgoritino cya complexidade no pior caso sj igul a valor Pbtido ua letra a), ou seja, um algoritma étimo, 12.E dala una matt n xm A, na qual cada elemento 6 denominado Aye 1S4d Sn. Sabemos que a mati fof orden de modo a (Cara, 1989} Ay < Aig, para todo ie j 1 wig, Abwesente un algoritmo para obter © maior o segundo maior elementon de Up confunto. Apreente também uma anise do algortmo, Voce veka see yea onal Algoritmo eficiente? Por qué? Procure comprovar suas respencan 14. Considere o problema de inserir um novo elemento em um conjunto ordenado P(n—1) ck constantes, n> 0 k All] > AB] > AB) > <--> jn aTia/+n n> 3) Apresente um limite inferior para essa classe de problemas 1 ) Apresente uma prova informal para o limite inferion. 30(n-1)-27(0-2) >t ©) Apresente um algoritmo Para resolver o problema desta questdo. O seu ° algoritmo é étimo? i 45. Paula uma lista ordenada de n elementos de valor inteiro, problema de DLs 1 nat sucnsio de lista consste em realizar seguidamente & operagio de renner oe 1 {az canton de menor valor da lista e inser un now elemento com valor gual TIA) logn, para n 21 soma dos dois prinicios. A cada operagio a lista pasa a ter on chee 1 ‘menos. A unificagio termina quando restar somente um elewto ne hare Dia: use mudanca de varidves Cop. reaueso 48 4 Projet se Agrtmes ms ‘ais (ovos caipira), n6s desejamos 2 teifco de m aadares © K ovo especais (ovo capita), r ‘aula mais alto do qual podemos aremessar ‘ia solucéo satis T(n) = Ofratog? n), SEE a eller algeria para cada un dos Prove usando indigo matematia mm (Maher, 198, p. 56) cre? Spent 9 tor lis Zh 18. Considere o algoritms a seguir: Suponha que a operagdo crucial # 6 fato de! = isspcionar wn eletento, 0 algoritn inspeciona on lementos dun conjges ane apenas um ov ode algnma forma, isso permite descertar 2/5 dos eemutan ceniea tage ws. Shami ecurtasbne aes ca 25 Tonos dis J Tennea muitos owes 21 (n/2}) + 2ntogyn 4 void pesquisa (int a) { if (nce) “inspecione elemento! © termine else { para cada wm dos n elementos esquisa(3n/5}; inspecione elemento"; 8) Escteva uma equagio de recorréncia que descreva ese comportamento, +) Converta essa equagio pare um somatéria ©) Dé a formula fechada para esse somatbrio 19. Considere o algoritmo a seguir: void sort2 (int vf}. int 1, int J) ( /*= numa potencia de $e.» wm vetor de 1a n els i) t k (=) 44/3; sort Iv. i, 14 ea), sort? (+k, is Bk): sort? (v.14 28, 5); menge (Vy i, i 4k, 1+ 2k, j)s merge intereala, Win +R Df Ulli + b)..(4 40k ~ te YPE Bk. 5] em fii] um custo 5n/$ 2 *) Fscrera uma equagio de recorréncia que descrova esse comportamento b) Converta essa equagio para um somatério, ©) De a formula fechadn para esse somatério. Paradigmas de Projeto de Algoritmos tivo deste capitulo € opresentar os principals paradigmas e téenicas de ‘de algoritmos, assber: indugSo, recursividade, algoritmos tentativa e erro, feconquista, halanceamenta, programacio dintmica, algoritmos gulosos 6 apreximados, Na apresentagao dos tpicos, set apontado no longo do conde cada paradigm € empregado. Inducdo 6 matemitica tim utn papel importante no projeto de algoritmos, pois ferramenta nmi ail para provar tseergbes sobre a correo ea eficincia fog. A ind conssto ez inferit urna li geal a paride nstancas ares. De acordo com 0 Diciondrio Howaiss da Lingua Portuguesa, indcio “riciocinio que pars de dados particulars (Fotos, experiéncns, euncivtos 5), por mio do uma seqivincia de operagbescopnitias,chegs is etos mas geri, indo dos feito &eausa, das conseqiencias ao principio da ncin teria’, Esa sgn apresenta uma breve introduc do principio ds plug matenica por meio de exemplos “A indacio matematca & uma téenica muito poderosa para provarassergbes € 03 nfimeros naturais. A técnica funciona como segue, Seja T um teorema esrjamos provr, msponhamos que T tenha como partietro um nanero fn Em vee de tentar provar dvtamente que 1’ yaldo para todos os dem, basta prove as dias condigbes a seguir T 6 valido param =; 2. Para todo n> 1, se T ¢ vilido para n~ 1, entdio T 6 valido para n. cap? Pragmas e Projeto de Aigorionos 53 52 Proto de Agrimos aa pe cons vendo fo) = 4%, Ques oa OU) sem aio atonaiaenn, Prine det verter pout) 1 f(2) = 4, No passo to ea €T() = cs a) < $0) Stplca 72m) < f(2n). A prov & o 20 (o) +201, (psa defo da rxoréia) Qn? 42n=1, (pela hipdtese de indugio) 20, . cnt 0a ane pws, Logo Fl) = OF). Ser ae itive para F(a}? No timo pass da prove, a expresso 2 Sta ge acta tes de 2 ne a de et ke ps ser una ctat flea pra 10) sma constante ipive menor, digamos f(x) = en, para au r ees ror ave Tn) en inplica 72x) $ cbr. Assim: Fe Inalotia das vees, provar a condigio 2 & mais facil do que prove n tec ssa sfirmativa € chamada de hipotese de indugao ou passo indudinc i a duas condigbes na pagina anterior so sificintes? As condigng Te2n) sina mPlcam diretamente que 7 ¢ valido para m = 2 Se ¢ vido paren Gane, Srnise 2 implica que T também 6 vido para n = 3, ¢ asim pe dante, © principio da indugio € hésico , por is60,€ coloeado tone ise axioma, nna definigéo dos nimeros naturais 7 Remplo: Vamos considerar a expresso para a soto dos primeiros nimero painrae ito & (x) = 1424-00 m. Vamos provar que a some dae primeiros nimeros naturais € $n) = (n+ 1)/2, AAA 3. bit & Por inducio em n. Sen = 1, enti « asergio 6 verdadeira Fora SU) = 1 = 1x (1419/2 (passo base). Agora assumimes que a cone | ah Primates m rimeros naturis S(n) & n(n + 1)/2 (pote de induc) rena ee, e8assereio implica que a soma das primeitos n+ 1 mamcos Boer De eh ys (ef At + 2)/2. Pela dfinigan de S{n) ambemos gue Rm ED = Sia) + m+ 1. Pordm, pela hipétese de indugio, Sn) = nee ee logo Sl +1) = n(n + D/2-m4 b= (n+ Im 2/2, que é exatamente © que | ‘queremos provar (pela definigio da recorréncia) (pela hipotese de inducio) Ten) < 2T(n)+2n~ 2en-+2n— 1, an ce 4 claro que cn cresce mais lentamente do que o crescimento de txso, esta claro que & > fy eniste: eapaco pera o valor Qn ~ 1, que est “tama ver que c2n = 2en e udu existe espago p ‘ a, Loge Te) es are oe oo noses St f() = magn No so be TA) < 22. SEES Sac oni aur Tio) © ming Quowmes nostri Considers seguinte equacio de recorsénca definida para valores den roe op poténcias de 2: (2h) < 27 (n) +20 en Jen definigia da reeorsénca) Qn) < Bin) +2n—1, _ Qniogn + 2n—1, (pela hipdtese de indugio) 2nlog20, ar. A diferenga entre a9 fOrmlas agora & lente 0 que gueriamnos prov frm cae Ivo esgic qu staron bh pero da sla. De a T(n) =nlogn=n-+1 4 Seclo 14 apresenta uma mancira de esolver a Bq(21) © obtor uma fore vr cach pars encontrar 0 valor da fungi para qualquer valor ec soe nv rere ce enttetanto, em ruitassituagdes, € dll obter a solusao de wa Sqhasio le recorréncia. Nesses cass, pode ser mais fic tenar nivinhar hehe Ee fu Sheet aun tite superior pan a ordem de complesdade da elurse a equagio de recorréncia, Zeininhar a solugio funciona bem pars uma grande quaatidade de equagdes ce recoréncia, especialmente quando estatus interessados apenas ent ant Leon Siperion em ver da soluséo exata. O método de adivinkar@ ttl porque muvee ‘solugio exata de spreeranke iste € mals fail do que obter o mito. Repare que » Ey (21) agurmenteda como una inequasio, e no como uma equagae, ‘Nese coco 4 quieting @ encontrar um limite superior na notagto O. em que» lade disces da Gerghaldade representa 0 pior caso. Em outras palavras, desojamon canigsen Bye Lunsio Fle) tal awe T(n) = O(f(n)), mas procirando fare com ae flo) ‘seJ8 © mais préximo possivel da solusao real para Tn) 54 Prjto de Agwiemoe oo. 2 Parag de Projets de Algorimos 5 2.2 Recursividade ogyama 2.2 mestra © nétodo central da classe ArvoreBinaria apre- mwenta.o caminhamento central de forma ee rogramn 2.1, 0 qual implementa 0 me Tnhamento central, os 168 so visitados em orden lexioogré- 0 ao de mesons amen, data on Xo canta geore da Figura 2) wean ahora uso da recursividade geralmente Y chavs, Pecore a gua dos algoritimos, especialmente quando ‘ ps chaves na orden 1,2, 3,445, aturecs ou utiliza estruturas recursivas, tis como as érvoren Programa 2.2 Caminhamento central Tremp Cimon vane teeny sense psa erat et Fe 21 a Se eae oP | al (P0083 se Settin (9 e4-Steing(): Alrite, 1 0 métoto cent & chamado com 0 valor do objet de referencia too nd ra da vor, o pits comando vera a condigao de terpuntanc se p= null Se for diferente de null, entéo centrl Jo reunivamene seuindo a referencia a0 fbo & exquerda, até encon ft alludes plo odo simplest iar gunn chazoa, no casa centrale 0 comaado spuinte ¢ exes, Reoen 2 Koo hin psi ee a requ olla on. Noam dor pra ee Bll, valor 1 impreso, e central € chanado recursvament, send = ia a0 filho & direita, 0 Programa 2.1 mostra a estrutura de dados para a érvore da Figura 2.1 pa Pmne 2.1 Estruture de dado par vores binros de pesquisa Package eap2 : pete ate ae ' indo mena un ltd recursv por mio um pi qu Object res; met tc adios os dados usados em cada chamada de um método que ainda nao Novesa, dirs mou de processar (vide Seco 3.2). Todos os dados nao globais vio para a ob estado cortente da computasio deve ser reistrado para que posse rao deaina mova ativagio de um metodo recurve, quand a tayo Private No rae; Vamos considera um ; um algoitno pace perce dos os Dew avore. Existe mas de uns onion de camiuhannento ee ae caminhamento ei érvores, mas ‘mais utlizada para devores de p es ms : Mw mao ‘mou, utiizando 0 a res de pesquisa é 2 chamada ordem de eaminhamento : ull, © nétodo retora para ques chao central. Esse caminhamento ¢ melhor exps “ de retoran que esta no tapo da pitha, por melo de um operador igual sso em terms ecu, ab 1. caminhs na ubvoreexquerda na ordem central 2. visita a raiz; . deserpitha apresentado na Seco 3.2. 3. cazminba na subsrvore direita na ordem central 56 Projeto de Algeritmos an freee . Como todo comando repetitive, dade de iteragdes que poden nao t derar o problema de terminagio, ‘ecursiva a um método P esteja su tisfeita em algum momento da cox Dara métodos recursivas como saber ‘métodos recursivos introduzen © possi ferminar, implicando a nevessidade de se cong, Uma exigéncia fundamental & que @ chamad jeita a uma condicao B, a qual se torna nio ¢ mputacio. Wirth (1976) apresenta um esquen Sendo uma compesicéo C de comandos S; P, idere 0 eileulo dos nfimeros de Fibonacci defindos pela se- onsidere 0 eile go de recornéncia: (h fn Fito io wi chamados por terem sido intodios por o italiane ‘do século XIT, em publicagéo de 1202, na (alae ro pesos pel warren acim com velo ee ea in con e235 81321 9485, eis agar tenia, ori de oo cit da comp ee ia By 4) fi arena por De Mote, a saber: Lge Fee Goan (2a) fait fn-a paran > 2. pamer matertico i seieacin de P if B then Cls;, P), A téenica bésica para demonstrar quo uma repetigia termina ¢ definit ung. funcio f(2), na qual + 6 0 conjunto de variéveis do programa, tal que 1. fle) $0 implica a condigio de terminagao; 2 F(a) € decrementada a cada iteragéo, ‘Pi forma simples de garantir a terminagio & assoiar um parketro n para P | {2 Ga Bor valor) echamar P reousivamente com n~1. Logo, a suetiaign | a Ge condigio B por n > 0 garante a terminagio, o que pode ser formalmecg | = expresso por: 4 fe (1 + v5)/2 = 1,618 ¢ a rao de ure ‘Como (carn renee ido je (0 < 4! < 1), entdo o valor de fy € aproximadamente 7 ve, Pte tan gos pon ine resp ek ‘fos pois, quando n cresce, o grau de precisa: necessdrio para ‘de v5 e @ fica muito alto. ‘reeursivo obtido diretamente da Eq.(2.4) pode ser visto no Pro- P10 irovana nena ects pucan real 0 meso wi ‘vezes. Por exemplo, para caleular fibRec(5) sio necessirios 0 “ sei «nine ean etn nn seb te para o cdlculo de fibRec(3). Assim, ae “ teul wee Rec| 3 vezes, fibliec(1) cinco veres e fibRec(0) tres vezes, Os 8 Oe mcd, ibRee(4), fibRec(3), fibRec(2) e fibRec(1} so 1,1,2,3,5, Ps ‘n> 0 then PIS, P(n —1)). Gonciuindo, na pritica ¢ necessério garantir que o nivel mais profundo de recurso sje ndo apenas finito, mas tambeéan possa ser mantido pequeno, pois, ne ceasiio de cada ativagio recursiva de um método P, uma parcela de merndria ¢ [ecessiria para acomodar variéveis a cada chamada’ Asst, um aspecto impor: {ute Para manter o tamanho da pill pequeno é o balanceasnento, ume Veeniea bisiea para um bom projeto de algoritmas, que é 0 tem da Sete 25 2.2.2 Quando Nao Usar Recursividade Meoritmos reeursivos s2o apropriadas quando o problema a ser resolvido ot 8 ") chamada recursiva 6 empilhada e esse nimero 6 O(n}, A verso recursiva do Programa 2.3 segue o Esqueta (22). 0 Prograni 24 ‘presenta na verso iteration para caleular fp, de acordo com 0 Exquena (23) Figura 2.2 Arvore de subtrees. Programa 2.4 Método iterative para caleulr nimeros de Fibonacci ce tk tate id So Bow ci ett i na esa rmados nfo levem a solugio final, eles podem ser mo ocesorel feist a veres, & pes nna aryore tem de usar algo- ee eo ae -Pasieio do cavalo no tabuleiro de xadirez (Wirth, 1976, p. 187). 4 Jmenta-se segundo as do um tabuleiro cam =x m pigs, 0 culo movies oa “xadrez. A partir de uma posigéo iniial (20, yo), 0 pro fr, umn passeio do cavalo com né — 1 movimentas, tal que 0 Pepa 24 ten cpl de tompo Of) compen de ne SE a a OC). Brassard e Bradley (1996, p.73) apresentam umn quadeo comparative ee ot iderar a possibilidade de realizar tempos de eneenaa dos Programas 23024 te eae ee aia are oer ona nse pasa dria Os tempos do método fbRee para n > 50 foram estimatios Conshinde, doxeus ign movimento om weer que de no € pose, 0 Progr 23 ap ‘evitar 0 uso de recursividade quando existe uma solucdo Sbvia por iteracdo, ‘primeiro refinamento do algoritmo que tenta um pri Tabela 2.1 Comparagio dos métodos fbkece filter a ; [ume ee i aes PoP ao 4 sel de movimento; (Wblier V6 me] WF mis [172 mae | 97S ms [HB ona préximo eaadidato ao movimentos AF (tabuleico azo esté cheio) { ohana pv tet 7 jn testa nova movimento; // Ghamada reewrsiea 2.3 Algoritmos Tentativa e Erro if (oso ouslido)apaga regatro anterior: ‘A recursividade pode ser usada para resolver problemas euja solugdo 6 tentar todas vo as alterativas pesives. A idea para algvitmos tentativa e erro ¢decompor. 4 : sadida¢ no acabaram candidates a movimento); © processo em um nner fnito de subtarefis pariais que devem ser expovaes sexaustivumente. O processo geral pode ser visto como tum process de pean on de tentativa que graduaimente consti e percrre uma arvore de meant, conforie rvstrado na Figura 2.2. Os algoritmes tentativa w eo no toque Tegra fxa de computaro,e funcionam da seguinte maneia, 6 Preto de Agoimos tta.9]= Ocampo fe visitado, f campo <2,y > visitada no i-simo movimento, 1 As regras do xavee pars os movimentos do cava A iments do cavalo podem ser vistas na Fe tera 23. pari de um pont de pata exes oe posto ne ak posstwis: 0 prittero ponto ¢ obtido somando 2 abscins tv ft ordecade ‘segundo somando I a abscissa x e 2 & ordenada ‘V, © assim sucessivamente. ve Figura 2.3 Oito movimentos possves do cavalo no tabuleiro de xadrez, ees a Rta 26 sree o progr compl cnend igo daa sitar do es dada prea mtodn lente nes Para Asari 2 domstods tent rqeenta mcoornadastonen ae ee i Cointmero do uo para ser rein, gum boakano panne en contolao préxino wovinentodeuto do comand de while eee Contén a shcisas «ordenadas, eapectivamente, she wo ee ee ae dace pti de yen dingo nay Or prime done O relat se sesso do monimento fea conte ae oe ls © tabul nfo ets eo quando 1 < nom sine! ad ae quando 7 =n? A Figura 2 mostra uma pa igura 2.4 mostra uma solugdo para um tabuleiro de tamenho 10) 63 30/17} 33/25/19] § aia zs] sal «fash aa [salsa] 5 oof} Figura 24 lnstdncia da passio do cavalo no table de xadiez de tamanho $8 an. 2 Pasig de Prieto de Alortmos 61 programa 2.6 Refinamento final do algortmo que tenta ¢ prximo movimento do cavalo ca Me class PasseloCavalo ( publfvate int ny. // Tamanho do ldo do tableiro private int aj]. bi], ¢UH0s ae tll: this. a = new ints thieb me at} af] = 2s aft] = 1; al2] =—1; als] =-25 MSE RPE a oy =a) ala] 2; al] = -1 + ale - i a 2 Be ae hg com rs or time j = 05) 1 tenhiam sido substitu apenas T(1). No easo da Ba.(2.7) vemos ara resolver a Bn.(2.7) 6 diteito da equacio até que idos por formulas contendo Tin) = Tw 1)4n-4 Te) = Tin-24n-2 72) TQ) +1 Adicionando lado a fado, obtemos: TO) =T0) +14 24-40 Logo, 0 algorimo 6 O(n) Erbora 0 algorittmo possa ser visto como uma aplicagio recursiva de dive so ¢ conquista, ee no ¢ eficente para valores grandes dle 1. Pare ot chee tum algoritine de ordenacao assintoticamente éficiente, ¢ necessério conseguir um balanceamento, Em ver de dividir um problema de tamanho m em dois subpro- nica divisio © conquista divide o problema pecto importante no projet de slgortmos: Drocura sempre manter 0 balanceamenta na silidiviaas dev og ue divisio e conquista nao & a nica _ culo 5 contem varios exennplos nos Tes On 0 balanceamento do custo de icentes, Para ilustrar 0 principio do. iacio ein que o contraste Wem subproblemas desiguais«o efeita de dividit Can 2 Paradgmas de Proto de Algaimss 7 Fe blemas de tamazhos oproximadamente iguais. “ jominada intercalagéo (merge). Essa on a an mrt ar are “acoder jos posteriores. Esse pro- a sconsideranda esse mesmo elemento nos passos post Ee pe 10 de ordenagio, O- Se ao sc Sein ee 9 see ne mo de am tts canes Ap agin deter ec ten sn rand veto de mls fran tor Gita de dis sleentn. Repti coe procs formado svi de intros ofan — I] vet “gins etticie'm com> ama poten de 2. Parag proves de intra : anne vento oneradan atmos usar 0 modo merge, 3, ae rete “nna dn nto fm] 1} pod a. ta Set orn contin don elas de vin vim +1) Como Gime ses Ld etn ordeals, mange eer sino wa cmp BATU doce a coma dos comprinentos dew] e lm-r1g) st, || Gye Co nimero total de elementos em etm) vfm+ log]. Ométodo merge eo et ene en ets oe Een Qunado howe copa seta de ane des, por emp 0 mts mero) moe gana 28 orden bee da de inteizos off] = e.0is1+ aj, assunndo que a subeiénca tm com- fhineto 2 prs aga E20. areca una dads 0.0 I] = L ‘basta chamar mergesort(v,0,n — 1). FOBT Programa 2.8 Mergesort pong aa : Pepesne nae seed mrgSort int] ak fGh terme mag representa o custo mnimo para calculas: Ml = Myx Muy 0 Me rnnimo para calealar: © segundo termo, my, representa 0 custo P» MMS Mya % Maga 2 x Mj ° add, sesesenta 0 custo de mien Md) por ded. 8 Ea(29) a gue may esenta 0 custo mimo de todos os Mild dj, A Ea(2.0) dr que my 5 > representa 0 cto valores possiveis de k entre ¢ j ~ 1 da soma 7 Prato de grime cap 2 Paatgmes 6 Projeto de Algrtmas TE rogramacao dindimica calcula os valones : ceed ieee on ast Oca ene dey 8 de cccugio do Progeun 2.9 obtém 0 costo minim para mili a8 m 7, Sc ma comin me rir FES Mik © Muy; estardo disponiveis no moment 4 Re Dporave ji tam de ser etetanenteroior do ue ane 2 on one doth dado 0 1, 20, 5, 1,100, resulta no valores cle my FG) se estver no itervalo tb on valores de Fe ja.) ondem na qual as uulipiagies deve er onli Miya X---> Ms m0 [tia ‘gy = 5000 iport java. io.+; ublie class AvaliaMultMatvizes { olugio eficiente para. o problema da multiplicaglo de m matrizes usando Public static void main (String]) ar as Meat Sg ar) tome 18sec nce po yale a ase io as cay mente 2 1s : “foptimakity) O principio diz que, em uma seqiénca dima de ecolhas BomecedReadey iene enim Recados, cada subscqiencia deve também ser tina. A Eq(2) diz que re re ptteretReader JS i representa o custo minim de todos os valores possveis de k entre ¥@ Sosa ou pene cmc nga (Sti) oma de t2és termos: 0 prtzo termo mx fepresenta 9 custo minimo b= Integer parsetut (in-readLine()), ulor M! — M, x Mcy1%--- Me, 0 segundo termo mgs. representa 0 Sotem.out- print (°Dimues dae patrizens® nim para calcuar M" = Mya % Myaa % ~~» x My ¢ 0 terceto termo for Gnt i= 0; Fem ne bee) ines") \ ‘representa o cusio de multiplicar M(d;-1, ds] por M"d,, dj]. Nesse caso, Ee perce Cli] = f ibeeqiéncia representa o custo minimo, assim como mij, J > 4 Assim, ~ Integer. parselnt (in.readLine()}; § valores da Tabela 2.2 representam escolhias Otimas. pesir de o principio da otimalidade parecer Sbvio, ele nfo pode ser apli- O55 < my tes) mfiytiy = eft bk pee =a so tne a to Fit = bens 149 ( o sobre» posbiidade de se asa com sucesso a programacdo dinanica ali —a])—1] = Iau FE ite quando o principio da otimalidade se aplica. Quando 0 principio Foe cies, MO Secs Tyas yblan om qesin no no el ‘int temp — mii -ayfee-at sore ge prograzmacia dinimica. Por exemplo, esse ¢ 0 caso quando o problema Het mika + diay « atk} « ati); | recursos limitados, Nessa situagio, pode ser que a solugao étima para it (ane cette L UE) fh = temp io possa ser obtida combinando solugbes Otimas de duas ov mais stem. ouprint(* mf 25" *u8]= » 2% foal de recurso usados nas subinstancias for maior do que 08 A HTL Mem 1, ; a ecenplo, 0 eaninho mais curt entre Belo Horizonte Curitiba passa mh entao cami ene Belo Hotionte ¢ Campings taobém € 0 o posse, aedon como 0 earinho entre Campinas ¢ Cnitba. Loge, 2 bio dn oritmafidade se apiea.A Sogo 7-4 trata do problema de encontrar © th ns curt enue dois vertices de um glo 1 Sate out pine; Bin contrapartida,considere o problema de encontrar o camino mais longo das cidades usando um dado conjunto de estradas. Um caminbo simples @ visita a mesma cidade duas vezes. Se sabemos que o catainho mais longo EUR Proto de Aigortnes Shtre Belo Horizonte e Curitiba passa por Campinas, iso no significa que 0 ho Possa ser obtido tomando o camino simples mais longo entre Belo Hogs atin, © depois o caminho simples mais longo entre Campinas & Cora Quando os dois camintos simples sio juntados, & pouco provivel ue 6 ex resultante tambémn seja simples. Logo, o princi © problema de encontrar o catninko tais lon Digina 378 e também no Exercicio 9.17. ioio da otimalidade ni se apl igo entre cas cidades apaseee que parece mais promise lecisio, independentemente «que possa acontecer mais tarde. Nao existe necessidade de avaliar alienate rer aeatbttsa algoritmes sftcados que permitam desfazer dese toma Previamente. 4 rasko deo algorituo ser chamado gulowo& que slgritina coc ‘ada passo, 0 candidato mais evidente que posta ser alicionaa soluese Considere o seguinte problema geral: a partir de wn ‘eterminar um subconjunto $C C tal ave (1) 0s problemas que eles consegquers ‘io caracterizados pelas seguintes consideragbes 3 | Considere um problema em que a solugio 6tima deve ser obtida. Pare onstrulr solugio existe um conjunto ou lista do candidatos, como, por exemplo, as arestas de um grafo que podem ser usadas pata construly vom caminho, 2 Na modida et que o algoritimo procede, dois outros conjuntos 0 ace imulades. Um contém candidatos que forain considerados escolhidos, € 9 ontro contéma candidatos que foram considerados e rejetades, © Bxiste uma fungdo que verifiea se um conjunto particular de candidates roduz uma solucdo para o problema, sem considerar questses de otfmase. Hdade naquele momento. Por exemplo, us aresias selecionadas produseed tum camino para o vértice que deve ser atingide? ma segunda fungio verficn se um conjunta de candidatos @ widvel sto £: 80 € Possivel completar o conjunto adicionanddo mais eandidatos de tal fortaa que pelo menos wma solugio passa ser obtida. Aqui tambénn nao existe preocupacéo com a otimalidade. Farce $ constitu uma solucao Gta, Quando wm alg Cap. 2 Parasignos de Proto de Aono farwada fangéo de selepaa, indica a qualquer mo- Ima outra funcio che foram nem escolhides nem ane us dx eats festantes que 80 ~ yejeitados so os mais promissores. ss coma [ 1a fungdo objetivo fornece o valor da soluc it ul Caen primerto ‘do caminho construide. Ao contririo das trés . _ emo co phdasanteriormente, a fungio objetivo no aparece exp — a | tamente no algoritmo gule supa 10 apreeia um peeocigo dew algo gus gets Fa em Sd cadatos sain et vo A sei readers aa na tena € emir, endo Satin tad pe fg deseo. Seo cnjuto aumento d pt ‘torna invidivel, o candidato corrente € rejeitado ~ ue pate Aanto, se 0 conjunto aumentado & viével, o candic Ne {alison Bendre perme spar de eto, Cae eS mtd er uu ow cn, eo a manda spre osm. O a primeira solugo encontrada desi soe 0 aap Sogn 17-1 most oalgoritmo guloso genic para igeradora minima, Programa 2.10 Algoritmo guloso generico nto guloso (Conjunto C) { /+ C: conjunto de eandidatos «/ 2; /+ $ contéan coxjunto solucdo +/ (UG #0) &E not solueao1S)) ( Te= seleciona (C)s =0- x; (vigvel (S +) 8=8 + x5 [sohugio (S)) return § else return ("Nao existe slucio" 5 fungio de selecdo & geralmente relacionada com a fancio objetivo. Se 0 Si ed See Si aro, sc a nema tte Um Se imp a ea mais & reconsiderado. Outro exemplo ¢ 0 algoritmo para oso ap, 2 Parag de Prjta de Agomos 7 74 Proje Se Agsimes jes Instanta centenas de exes ex mm ee veep numentar 4 velocidad dos apis Bete, a aes orn de wae, Oo de or eanivalente, ta fo ao estudo de algoritmos paralelos sot F wresenta uima introdugao ao est ‘sho (1989) & Problemas que podem ser raslidos por algoritnos pinot Piao tani pron Ot reso A (1989) « ic ean probit que tie tan). De er me as det a ‘ins cosiderads "fet Beige, coma Cormen, Lesenon, Rivest Sti ( 2.8 Algoritmos Aproximados wento. Um exen -Viajante, enja complexidade tudo de problemas considerade visto na Socio 1.3.2 € 0 problema do caixeiro, tempo ¢ Ofn!). O Capitulo 9 & dedicado aa aliflecs Diante de um problema dificil € conus rem soritmo tenha sempre de obter a solugio stim algoritmos eficientes que nic garantam obter a so contrar uma solucéo problemas deste tipo, aprosimados, ver a exigéncia de que 9 so Neske exso, procuramos pl ‘© método reeursivo para caleular a woe, ean santa eg nom ve sein & mais proxima possivel da solucaa ide Fibonacci do Programa 1), anu eum tines txistem dois tipos de algortins: heuristicas ¢ algertg Tak) = 21, F ‘F(a —2) + A,paran 21 mestio obter a salugao . a algun Speen <2 itivos ¢ constantes ‘ou uma solugdo que esta distante da solugao dtima por Indugfio que exiscem tnks nimetos inteioe Po dlentemente Um algoritino aproximado é um algoritmo que. Bera solugies aproximas tal que zn! < T(n) < yn! 2n par ees etm site para a razio ence a snivao cia « 8 stone se age Areimado. 0 compostamento de aigontmes apnesimndes & eons ‘ado do ponto de vista da qualidade dos resltades A Secio 9.2 apresenta um ea proximads, A) =n +n (n—V),para n> 2 Towa =i . ping tos os vores itis pon de tas que n> "tudo detalhado sobre heuristicas e algoritmos. mite spine qi reves 5) Quando se deve ‘e quando nao se deve utilizar a recursividade ps ras iliaado 0 contador? ‘ vex da vero seen OF que & preferivel usar a versio iterativa em ve : aera pga db tipo Pew then SP} leva a melhores projetos evel GD statin int focccsiva (int 1) { de Braard Bray (198) pare se lent oa a 0 pecs int eeusie ( oy © enfoque orientado por Paradigmas. Aho, Hopcroft ¢ Ullman (1974) realcam 4 © lee return {recursiva (n ~ 1) + recursiva (n ~ 1)); 2 Meni de recursive programa den Nac (or) fk ber (G88) watam do ailsagio de indie intents roe ine ee aro projto de algontmen ‘a paradigm de proj de algoritmos paraieleg #0 de algoritmos que vem ganhano importancia Um computador paralelo é eapaz de realizar una Bfeeetows Cap. 2 Paradigmas de Projeto de Algoritmos 77 7. Construa um algoritmo recursive as of), oft}... vf ~ 1) de um vet sdnas partes de tamankos aproximadi Para encontrar © ior elemento das egg ort. O algoritno deve div ra lamente iguais, Gesetegio otc)? 4 4) Derive uma relagio de recoréncia para a fungio de complesidade ie eusto de instalagio de um cabo telefonica a partir de @ para ane 10) deni como o simero de comparasées rte os omen ae 2 prvi dtc exon de pra. Consider que cr ode ser considerado uma porta de 2. ; gn conatado aun custo isino. Encontre um exemplo de : ” ee we seja mais vantajoso diapor os cabos usando ligagies ) Resolva a relagio de recorréncia, 4 2 a a aue ue somente ligagbes ditetas. { so Stee io lo que oat somente 80 gue avonteceria com a eficiéncia dos algortmos baseaos em dvi Ree eene pogma « mem erssaatcn om do. Cada Conquista se recorréssetnos no maximo r vezes, para in constante a eee eat p amazon: oe ont sr B dada coustante n Pe eee deo llobyten para ser completamente ido, D 'Assemos © subalgoritmo bésioo, em’ ver de um limite para de pe J necesalt D kilobytes, onde D < Sy ‘quando reverter para 0 subalgoritnie? gy Gia correspon « D Kilby \ so por ss sera um algpitno J oti pr ego poder comida sng enol (unde vada, 9% Apresente um esboco do esquema geral de algoritmos de bacl 10. 3 si 1a que gostariamos de maximizar o mimero de programas armaze- sete BS ean circ eee ear nS Ce as lo em divisio o conquista p “empo equivtente Ofrlogn) dade possvel do disco , Suponba que gostriamos do usar @ maior capacdade Bo mcate wm conreexerplo ean que podeion Sia dro programas em ordem no erescente de pa sleconar os prog re para fn hogativas © & > 0. Prove que a solo de: {Fs cnt, onde a, be aT (n/t) renk no para n uma poténcia oe pom jlize um algoritmo tentativa e erro paré resolver © problema descrito O(nims, sea >b, tie Gerais, Jorge Monte Carlo, resolveu comemorar 0 final do semestre escolar. Sua cervejaria favorita do baixo Beld, a antiga Cervejaria Brasil (que hoje nfo 12, Para aafirmativa a seguir indig ee eee ‘sua resposta. Pelo caso 2 do teot woe “ tava nas Tuas, pronta para prender rem este sda tr Syimmen des, lich mn ps Tien ea (on) «i ivesse dirigindo sob influéncia de Seok Apesar foes nue de 12. Com un anode, unas rosie de pa cen pr Spon alr tr pie gs sive dma ta Destin xe a " ze programacao dinamica, 14, Sejam n objetos a serem ord e*" Por exemplo, coin 3 abi a sequit: ao cer em va enti para eas cng em 8 8 sein = ina, ele olharia em direcao aos cruzamentos seguintes, um de cada vex, ten ‘ora ra ponies 2 em direcdo & primeira esquina onde nio houvesse sinal de policia. aripairmamie ; pouco de esperteza, ele percebeu que poderia caminhar em ziguezague, e=bec acs a 3, x; € 0 primeiro item da listo, © x, € 0 Altimo la lista. Bm geral, 2, precede ae41 para i= 1,2,....n—1, em suende tint sn, eo elemento 2; 6 dito estar na i-sima posigdo da lista, 22 Prt de Ages a maior parte das aplicagbes 6 apresentado a seguir. Outras sugesties para onjunto de operagies podem ser encontradas em Kuuth (1968, p. 235) © Hoperoft-e Uliman (1985, p. 38-39). A. Crisr uma lista linear vazia, 2. Inserir um novo item imediatamente apés 0 ¢6simo item, eam 3. Retirar 0 éésimo item, 4. Localicar o iésimo item para examinar ¢/ow alterar o conteddo de ‘componentes, > Combinar duas on mais listas lineares em uma lista dea, Partit wma lista tinear em duas ow mais lstas, Fazer uma e6pia da lista linear. Ordenar os tens da lista em ordem ascendente ou descendente, de acorda com alguns de seus components Pesquisar a ocorréncia de um item com um valor particular em algum ‘componente, © item 8 & objeto de um estudo euidadoso ‘ratado com mais detalhes nos Capitulos 5 ¢ 6 Um conjunto de operagoes necessério para as diversas aplicagdes a sorem apresentadas neste © em outros capitulos ¢ apresentado a seguir, no Capitulo 4, ¢ 0 item 9 serd 1. Criar uma lista vasia Pesquisar um item na lista a partir do valor da chave Inserir 0 tem » apés o altimo item da lista Retirar um item da lista a partir do valor da chave. em qualquer rer Fam deslocamento de ap. Estrus de Dados Bisias 9 ntacdo de Listas por meio de Arranjos jo, os ens da lita so srmaenados em posicis esirosrado ran, ean eo Si aforme lust a Fights 8.1. News c0, ‘ Kedron de um nove He pode ser elizada matte A insergao de novo item 0 m0 tnd ox es oclzan ap pnt de isc descr mera do inicio da Tita equ tum delocanento Dpreencher c espaco deixado vazi. @ item com custo CO Figura 3.1 nplementagio de uma lista mediante aranj. irra da lista usando arranjo e uma possivel implementagdo para as seragies definidas anteriormente para o tipo abstrato de dados Lista ‘no Programa 3.1. Na estrutura da lista usando arranjo, 0 campo oo fo arnaenais en Seip componente da hse Lista. On tens so amaze ree uucrte praarartnar alia. O eampo limo da classe uma refertacia para a posigio seguinte a do nltimo elemento da (so sem da lista ets armazenad na + ima possi do aranjo lkmo, 0 cirapo pos ¢ utlzado para armazenar a posgso comrente sia, A constante mazTom passada como parirmetro no construto g6 tamanho méximo permitido pata a lista. eit de do ¢ cocapanad na clase Lite por mo do ula Sear private, ngs snes ds operadores trae vies fo do modificador public. Assim, podemos modificar tanto a estrutur ses quarto a imsemenaso das operates sm proocr era ns que utizan a clase Lista, dene Ue a interzacs dos op Retirar 0 primeiro item da lista. Retomar uma referéncia para o primeino item da lista, Retornar uma referencia para o prosimo item da lista. Verificar se a lista esta vazia. Essa operagio retoma true se a lista estiver varia; Sendo rotorna false. 9. Imprimir os itens da lista na ondem de oeorréncia, Existem virias estruturas de dados que podem ser usadas para representar | listas lineares, cada uma com vantagens e desvantagens patticulares, As duas representacies mais utilizadas so as implementagdes por meio de arranjos e de ‘straturas auto-referenciadas. A implementagio mediante cursores (Aho, Hop. croft e Ullman, 1988, p. 48) pode ser atil em algumas aplicagées. or aclase que presets o ipo abstrto de dados Lista. Outro aspacto ] 6 qu a clase Lista € contin de objetos genres, Um objeto em Java 6 um objeto que pode ser de qualquer tipo. Por exemplo, 0 ? Public void imprimne () { 2 Proto de Agrimas package cap3.arranjo; Public class Lista { Drivate Object item {]; Private int prineirey ultino, pos W Operagies mo fen = Suge Pic vid inere i (cheng = oa omen Mow ww scien iE: a tne hi rat while (p< this. ult it (p Object item = this. temps for (Int as = psx < this. ‘his. item aux) = this.itemjauy ret Helos} this ean» 3 } Public Object retiraPri if (this. vazia ()) ) Dubie Object prineiro Publle Ose ponine (4 this-poor 5 (its ps for (int aux ~ thi is.primeiro; aux < thi Syotem. out. println (this. tem faux). to } Programa 3.1 Estutua ¢operacbes sobre lists usando aranjo public Lista (int mua) { // Orie ume Liste asia this. tino ese sling) return male iting arti jet a= ee tenor for (int aux = 0; aux a ‘ian tate = veto thse lis. pos = 15, this. primeira; (Object x) throws Exception { a esta cheia"); timo} = x; this. ultimo = this. ultimo + 1; ) | Public Object retira (Object chave) throws Exception { 4 (this. vasia ()'|} chave = null) throw ew Exception ("Ero 2 A sq{iOn mo Exception ("Evo "Aisa esta vaiat); stale (ehave)) pis ‘Ghote nav encontrade aux) imeiro () throws Exception { ‘throw new Exception ("Etro 0 = this. ultimo ~ 1; timo: sus++) his.ultimo); } anes aus String ()); ’ A lista esta vasiat)sf. Cap 3 Esrures ts Dado Osean 85 sj acer imerido na lista 6 defnido na aplicaso no momento de cala Bacar liberdade de ter objetos de tipos diferentes em uma Siig o wsesio da Ista a expecficaro tipo do objeto a ser retiado oorceado no exemplo Vestibular apresentado mais adiante). Um st implementado por meio da classe Object! aio de Estas por meio de aranjos tem como vantager a 2c- cir, pols cs apontadores sao impliitos nessa estruturs. Como mnmnoe, () 9 custo para insert ou rtirar itens da lista, que pode m Jecnmento ce todos 08 itens, no pior caso; (i) em aplicages erm se prensa sate 0 cresimento da isa, a uilaagto de arranjos pode crpcasho de mera, Essa € uma operacao de alto custo ers termos de se vnemria, pois 6 preciso alocar uma nova ea com mais posigies do Peopar torts itens para cla (vide Exerciio 1 na pagina 101). wtacdo de Listas por meio de Estruturas o-Referenciadas aplementagio de listas por meio de estruturas auto-referenciadas, cada, ta contéin a informagio que é nocesséria para alcangar 0 préxinno item. Ge implementacao permite utiiaar posigdes nio contguas de memoria, Tserit ¢ retirar elementos sem haver necessidade de deslocar os da lista, 43.2 ilustra ama lista representada dessa forma. Observe que existe a cabeca que sponta para a eélula que coatéan 2. Apesar de a edlula 9 conter informagio, & conveniente fazé-la com a mesma estrutura que ‘ela qualque: para simplifcar as operagies sobre a lista e714 a » ae 2 Impementasao de uma lista por meio de estruturas auto-referencadss. “Glrutura da liste usando estruturas auto-referenciadas © uma possivel figio para as nove operagies definidas anteriormente para o tipo abs- p dados Lista sio mostradas no Programa 3.2. lista ¢ constituida cada célula contém um item da lista e ume referéncia para @ oélula “de acordo com a classe Celula. A classe Lista coutém uma referéncia cabeca, unie referencia para a iltima célula da lista e uma referencia wenar a posigdo corrente na lista. ‘Object ( wnasuperdlasse para qualquer class defini em Java

Vous aimerez peut-être aussi