Processamento de Cadeias de Caracteres

Tamanho: px
Começar a partir da página:

Download "Processamento de Cadeias de Caracteres"

Transcrição

1 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8. Dfinição Motivação Procssamnto d Cadias d Caractrs Última altração: 0 d Outubro d 006 Cadia d caractrs: sqüência d lmntos dnominados caractrs. Os caractrs são scolhidos d um conjunto dnominado alfabto. Ex.: m uma cadia d bits o alfabto é {0,. Casamnto d cadias d caractrs ou casamnto d padrão: ncontrar todas as ocorrências d um padrão m um txto. Exmplos d aplicação: dição d txto; rcupração d informação; studo d sqüências d DNA m biologia computacional. Transparências laboradas por Charls Ornlas, Fabiano Botlho, Lonardo Rocha, Lonardo Mata Nivio Ziviani Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8. Notação Txto: arranjo T[0..n ] d tamanho n; Padrão: arranjo P[0..m ] d tamanho m n. Os lmntos d P T são scolhidos d um alfabto finito d tamanho c. Ex.: = {0, ou = {a, b,...,z. Casamnto d cadias ou casamnto d padrão: dados duas cadias P (padrão) d comprimnto P = m T (txto) d comprimnto T = n, ond n m, dsja-s sabr as ocorrências d P m T. Catgorias d Algoritmos P T não são pré-procssados: algoritmo sqüncial, on-lin d tmpo-ral; padrão txto não são conhcidos a priori. complxidad d tmpo O(mn) d spaço O(), para pior caso. P pré-procssado: algoritmo sqüncial; padrão conhcido antriormnt prmitindo su pré-procssamnto. complxidad d tmpo O(n) d spaço O(m + c), no pior caso. x.: programas para dição d txtos.

2 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8. 5 Catgorias d Algoritmos P T são pré-procssados: algoritmo constrói índic. complxidad d tmpo O(log n) d spaço é O(n). tmpo para obtr o índic é grand, O(n) ou O(n log n). compnsado por muitas opraçõs d psquisa no txto. Tipos d índics mais conhcidos: Arquivos invrtidos Árvors tri árvors Patricia Arranjos d sufixos Exmplos: P T são pré-procssados Divrsos tipos d índics: arquivos invrtidos, árvors tri Patricia, arranjos d sufixos. Um arquivo invrtido possui duas parts: vocabulário ocorrências. O vocabulário é o conjunto d todas as palavras distintas no txto. Para cada palavra distinta, uma lista d posiçõs ond la ocorr no txto é armaznada. O conjunto das listas é chamado d ocorrências. As posiçõs podm rfrir-s a palavras ou caractrs. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8. 6 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8. 7 Exmplo d Arquivo Invrtido Txto xmplo. Txto tm palavras. Palavras xrcm fascínio. x mplo 6 x rcm fas cínio 5 pal avras 5 5 tm tx to 0 5 Arquivo Invrtido - Tamanho O vocabulário ocupa pouco spaço. A prvisão sobr o crscimnto do tamanho do vocabulário é dada pla li d Haps. Li d Haps: o vocabulário d um txto m linguagm natural contndo n palavras tm tamanho V = Kn β = O(n β ), m qu K β dpndm das caractrísticas d cada txto. K gralmnt assum valors ntr 0 00, β é uma constant ntr 0, na prática ficando ntr 0, 0,6. O vocabulário crsc sublinarmnt com o tamanho do txto, m uma proporção prto d sua raiz quadrada. As ocorrências ocupam muito mais spaço. Como cada palavra é rfrnciada uma vz na lista d ocorrências, o spaço ncssário é O(n). Na prática, o spaço para a lista d ocorrências fica ntr 0% 0% do tamanho do txto.

3 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8. 8 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8. 9 Arquivo Invrtido - Psquisa A psquisa tm gralmnt três passos: Psquisa no vocabulário: palavras padrõs da consulta são isoladas psquisadas no vocabulário. Rcupração das ocorrências: as listas d ocorrências das palavras ncontradas no vocabulário são rcupradas. Manipulação das ocorrências: as listas d ocorrências são procssadas para tratar frass, proximidad, ou opraçõs boolanas. Como a psquisa m um arquivo invrtido smpr comça plo vocabulário, é intrssant mantê-lo m um arquivo sparado. Na maioria das vzs, ss arquivo cab na mmória principal. Arquivo Invrtido - Psquisa A psquisa d palavras simpls pod sr ralizada usando qualqur strutura d dados qu torn a busca ficint, como hashing, árvor tri ou árvor B. As duas primiras têm custo O(m), ond m é o tamanho da consulta (indpndntmnt do tamanho do txto). Guardar as palavras na ordm lxicográfica é barato m trmos d spaço comptitivo m dsmpnho, já qu a psquisa binária pod sr mprgada com custo O(log n), sndo n o númro d palavras. A psquisa por frass usando índics é mais difícil d rsolvr. Cada lmnto da fras tm d sr psquisado sparadamnt suas listas d ocorrências rcupradas. A sguir, as listas têm d sr prcorridas d forma sicronizada para ncontrar as posiçõs nas quais todas as palavras aparcm m sqüência. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8. 0 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Arquivo Invrtido Usando Tri Arquivo invrtido usando uma árvor tri para o txto: Txto xmplo. Txto tm palavras. Palavras xrcm fascínio. x f fascínio: 5 p palavras: 6,6 t m x m r tm: txto:, 6 xmplo: 7 xrcm: 5 O vocabulário lido até o momnto é colocado m uma árvor tri, armaznando uma lista d ocorrências para cada palavra. Cada nova palavra lida é psquisada na tri: S a psquisa é sm sucsso, ntão a palavra é insrida na árvor uma lista d ocorrências é inicializada com a posição da nova palavra no txto. Snão, uma vz qu a palavra já s ncontra na árvor, a nova posição é insrida ao final da lista d ocorrências. Casamnto Exato Consist m obtr todas as ocorrências xatas do padrão no txto. Ex.: ocorrência xata do padrão tst. tst os tsts tstam sts alunos... Dois nfoqus:. litura dos caractrs do txto um a um: algoritmos força bruta, Knuth-Morris-Pratt Shift-And.. psquisa d P m uma janla qu dsliza ao longo d T, psquisando por um sufixo da janla qu casa com um sufixo d P, por comparaçõs da dirita para a squrda: algoritmos Boyr-Moor-Horspool Boyr-Moor.

4 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Casamnto Exato - Métodos Considrados A class CasamntoExato aprsnta a assinatura dos métodos d casamnto xato implmntados a sguir. maxchar é utilizada para rprsntar o tamanho do alfabto considrado (caractrs ASCII). As cadias d caractrs T P são rprsntadas por mio da class String. Força Bruta - Implmntação É o algoritmo mais simpls para casamnto d cadias. A idéia é tntar casar qualqur subcadia no txto d comprimnto m com o padrão. public static void forcabruta ( String T, int n, String P, int m) { / / Psquisa P[0..m-] m T[0..n-] for ( int i = 0; i < (n m + ); i ++) { int k = i ; int j = 0; whil ( ( j < m) && (T.charAt (k) == P.charAt ( j ) ) ) { j ++; k++; if ( j == m) Systm. out. println ( "Casamnto na posicao : " + i ); packag cap8; public class CasamntoExato { privat static final int maxchar = 56; / / Assinatura dos métodos para casamnto xato considrados public static void forcabruta ( String T, int n, String P, int m) public static void shiftandexato ( String T, int n, String P, int m) public static void bmh ( String T, int n, String P, int m) public static void bmhs ( String T, int n, String P, int m) Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Força Bruta - Anális Pior caso: C n = m n. O pior caso ocorr, por xmplo, quando P = aab T =aaaaaaaaaa. Caso sprado: C n = c c ( c m ) (n m + ) + O() O caso sprado é muito mlhor do qu o pior caso. Em xprimnto com txto randômico alfabto d tamanho c =, o númro sprado d comparaçõs é aproximadamnt igual a,. Autômatos Um autômato é um modlo d computação muito simpls. Um autômato finito é dfinido por uma tupla (Q, I, F,, T ), ond Q é um conjunto finito d stados, ntr os quais xist um stado inicial I Q, alguns são stados finais ou stados d término F Q. Transiçõs ntr stados são rotuladas por lmntos d {ɛ, m qu é o alfabto finito d ntrada ɛ é a transição vazia. As transiçõs são formalmnt dfinidas por uma função d transição T. T associa a cada stado q Q um conjunto {q, q,...,q k d stados d Q para cada α {ɛ.

5 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Tipos d Autômatos Autômato finito não-dtrminista: Quando T é tal qu xist um stado q associado a um dado caractr α para mais d um stado, digamos T (q, α) = {q, q,...,q k, k >, ou xist alguma transição rotulada por ɛ. Nst caso, a função d transição T é dfinida plo conjunto d triplas = {(q, α, q ), ond q Q, α {ɛ, q T (q, α). Autômato finito dtrminista: Quando a função d transição T é dfinida pla função δ = Q ɛ Q. Nst caso, s T (q, α) = {q, ntão δ(q, α) = q. Exmplo d Autômatos Autômato finito não-dtrminista. A partir do stado 0, através do caractr d transição a é possívl atingir os stados. 0 a a b Autômato finito dtrminista. Para cada caractr d transição todos os stados lvam a um único stado. 0 a d b c c Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Rconhcimnto por Autômato Uma cadia é rconhcida por (Q, I, F,, ) ou (Q, I, F,, δ) s qualqur um dos autômatos rotula um caminho qu vai d um stado inicial até um stado final. A linguagm rconhcida por um autômato é o conjunto d cadias qu o autômato é capaz d rconhr. Ex.: a linguagm rconhcida plo autômato abaixo é o conjunto d cadias {a {abc no stado. 0 a Transiçõs Vazias São transiçõs rotulada com uma cadia vazia ɛ, também chamadas d transiçõs-ɛ, m autômatos não-dtrministas Não há ncssidad d s lr um caractr para caminhar através d uma transição vazia. Simplificam a construção do autômato. Smpr xist um autômato quivalnt qu rconhc a msma linguagm sm transiçõs-ɛ. a b c

6 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Estados Ativos S uma cadia x rotula um caminho d I até um stado q ntão o stado q é considrado ativo dpois d lr x. Um autômato finito dtrminista tm no máximo um stado ativo m um dtrminado instant. Um autômato finito não-dtrminista pod tr vários stados ativos. Casamnto aproximado d cadias pod sr rsolvido por mio d autômatos finitos não-dtrministas. Ciclos m Autômatos Os autômatos abaixo são acíclicos pois as transiçõs não formam ciclos. 0 a a b c 0 a d b Autômatos finitos cíclicos, dtrministas ou não-dtrministas, são útis para casamnto d xprssõs rgulars A linguagm rconhcida por um autômato cíclico pod sr infinita. c Ex: o autômato abaixo rconhc ba, bba, bbba, bbbba, assim por diant. a b 0 b a Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Exmplo d Uso d Autômato O autômato abaixo rconhc P ={aabc. c 0 b a b,c c b a b c a A psquisa d P sobr um txto T com alfabto ={a, b, c pod sr vista como a simulação do autômato na psquisa d P sobr T. No início, o stado inicial ativa o stado. Para cada caractr lido do txto, a arsta corrspondnt é sguida, ativando o stado dstino. S o stado stivr ativo um caractr c é lido o stado final s torna ativo, rsultando m um casamnto d aabc com o txto. Como cada caractr do txto é lido uma vz, a complxidad d tmpo é O(n), d spaço é m + para vértics m para arstas. a Knuth-Morris-Pratt (KMP) O KMP é o primiro algoritmo (977) cujo pior caso tm complxidad d tmpo linar no tamanho do txto, O(n). É um dos algoritmos mais famosos para rsolvr o problma d casamnto d cadias. Tm implmntação complicada na prática prd m ficiência para o Shift-And o Boyr-Moor-Horspool. Até 97, o limit infrior conhcido para busca xata d padrõs ra O(mn).

7 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção KMP - DPDA Em 97, Cook provou qu qualqur problma qu pudr sr rsolvido por um autômato dtrminista d dois caminhos com mmória d pilha (Two-way Dtrministic Pushdown Stor Automaton, DPDA) pod sr rsolvido m tmpo linar por uma máquina RAM. O DPDA é constituído d: uma fita apnas para litura; uma pilha d dados (mmória tmporária); um control d stado qu prmit movr a fita para squrda ou dirita, mpilhar ou dsmpilhar símbolos, mudar d stado. # c c c n $ p p Control c n c n c # p m φ Cabça d litura Pilha KMP - Casamnto d cadias no DPDA # c c c n $ p p Control c n c n c # p m φ Cabça d litura Pilha No autômato da acima, a ntrada é constituída da cadia #c c c n $p p p m φ. A partir d # todos os caractrs são mpilhados até ncontrar o caractr $. A litura cotinua até ncontrar o caractr φ. A sguir a litura é ralizada no sntido contrário, iniciando por p n, comparado-o com o último caractr mpilhado, no caso c n. Esta opração é rptida para os caractrs sguints, s o caractr $ for atingido ntão as duas cadias são iguais. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção KMP - Algoritmo Primira vrsão do KMP é uma simulação linar do DPDA O algoritmo computa o sufixo mais longo no txto qu é também o prfixo d P. Quando o comprimnto do sufixo no txto é igual a P ocorr um casamnto. O pré-procssamnto d P prmit qu nnhum caractr sja rxaminado. O apontador para o txto nunca é dcrmntado. O pré-procssamnto d P pod sr visto como a construção conômica d um autômato dtrminista qu dpois é usado para psquisar plo padrão no txto. Shift-And O Shift-And é vzs mais rápido muito mais simpls do qu o KMP. Pod sr stndido para prmitir casamnto aproximado d cadias d caractrs. Usa o concito d parallismo d bit: técnica qu tira provito do parallismo intrínsco das opraçõs sobr bits dntro d uma palavra d computador. É possívl mpacotar muitos valors m uma única palavra atualizar todos ls m uma única opração. Tirando provito do parallismo d bit, o númro d opraçõs qu um algoritmo raliza pod sr rduzido por um fator d até w, ond w é o númro d bits da palavra do computador.

8 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Shift-And - Notação para Opraçõs Usando Parallismo d bit Para dnotar rptição d bit é usado xponnciação: 0 = 0. Uma sqüência d bits b 0...b c é chamada d máscara d bits d comprimnto c, é armaznada m alguma posição d uma palavra w do computador. Opraçõs sobr os bits da palavra do computador: : opração or; & : opração and; : complmnta todos os bits; >> : mov os bits para a dirita ntra com zros à squrda (por xmplo, b 0, b,...,b c, b c >> = 00b 0, b,..., b c ). Shift-And - Princípio d Funcionamnto Mantém um conjunto d todos os prfixos d P qu casam com o txto já lido. Utiliza o parallismo d bit para atualizar o conjunto a cada caractr lido do txto. Est conjunto é rprsntado por uma máscara d bits R = (b 0, b,...,b m ). O algoritmo Shift-And pod sr visto como a simulação d um autômato qu psquisa plo padrão no txto (não-dtrminista para simular o parallismo d bit). Ex.: Autômato não-dtrminista qu rconhc todos os prfixos d P ={tst 0 t s t 5 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Shift-And - Algoritmo O valor é colocado na j-ésima posição d R = (b 0, b,...,b m ) s somnt s p 0... p j é um sufixo d t 0... t i, ond i corrspond à posição corrnt no txto. A j-ésima posição d R é dita star ativa. b m ativo significa um casamnto. R, o novo valor do conjunto R, é calculado na litura do próximo caractr t i+. A posição j + no conjunto R ficará ativa s somnt s a posição j stivr ativa m R t i+ casa com p i+ (p 0...p j ra um sufixo d t 0... t i t i+ casa com p j+ ). Shift-And - Pré-procssamnto O primiro passo é a construção d uma tabla M para armaznar uma máscara d bits b 0..., b m para cada caractr. Ex.: máscaras d bits para os caractrs prsnts m P ={tst. 0 M[t] M[] M[s] A máscara m M[t] é 000, pois o caractr t aparc nas posiçõs 0 d P. Com o uso d parallismo d bit é possívl computar o novo conjunto com custo O().

9 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Shift-And - Psquisa O valor do conjunto é inicializado como R = 0 m (0 m significa 0 rptido m vzs). Para cada novo caractr t i+ lido do txto o valor do conjunto R é atualizado: R = ((R >> ) 0 m ) & M[T[i]]. A opração >> dsloca todas as posiçõs para a dirita no passo i + para marcar quais posiçõs d P ram sufixos no passo i. A cadia vazia ɛ também é marcada como um sufixo, prmitindo um casamnto na posição corrnt do txto (slf-loop no início do autômato). 0 t s t 5 Do conjunto obtido até o momnto, são mantidas apnas as posiçõs qu t i+ casa com p j+, obtido com a opração and dss conjunto d posiçõs com o conjunto M[t i+ ] d posiçõs d t i+ m P. Exmplo d funcionamnto do Shif-And Psquisa do padrão P ={tst no txto T ={os tsts. Txto (R >> ) 0 m R o s t s t s Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Shift-And - Implmntação void Shift-And (P = p 0p... p m, T = t 0t... t n ) / / Pré-procssamnto for (c ) M[c] = 0 m ; for ( j = 0; j < m; j ++) M[p j ] = M[p j ] 0 j 0 m j ; / / Psquisa R = 0 m ; for ( i = 0; i < n; i ++) R = ((R >> ) 0 m ) & M[T[i]]; if (R & 0 m 0 m ) "Casamnto na posicao i m + "; Anális: O custo do algoritmo Shift-And é O(n), dsd qu as opraçõs possam sr ralizadas m O() o padrão caiba m umas poucas palavras do computador. Boyr-Moor-Horspool (BMH) Em 977, foi publicado o algoritmo Boyr-Moor (BM). A idéia é psquisar no padrão no sntido da dirita para a squrda, o qu torna o algoritmo muito rápido. Em 980, Horspool aprsntou uma simplificação no algoritmo original, tão ficint quanto o algoritmo original, ficando conhcida como Boyr-Moor-Horspool (BMH). Pla xtrma simplicidad d implmntação comprovada ficiência, o BMH dv sr scolhido m aplicaçõs d uso gral qu ncssitam ralizar casamnto xato d cadias.

10 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Funcionamnto do BM BMH O BM BMH psquisa o padrão P m uma janla qu dsliza ao longo do txto T. Para cada posição dsta janla, o algoritmo psquisa por um sufixo da janla qu casa com um sufixo d P, com comparaçõs ralizadas no sntido da dirita para a squrda. S não ocorrr uma dsigualdad, ntão uma ocorrência d P m T ocorru. Snão, o algoritmo calcula um dslocamnto qu o padrão dv sr dslizado para a dirita ants qu uma nova tntativa d casamnto s inici. O BM original propõ duas hurísticas para calcular o dslocamnto: ocorrência casamnto. BM - Hurística Ocorrência Alinha a posição no txto qu causou a colisão com o primiro caractr no padrão qu casa com l; Ex.: P ={cacbac, T ={aabcaccacbac c a c b a c a a b c a c c a c b a c c a c b a c c a c b a c c a c b a c c a c b a c A partir da posição 5, da dirita para a squrda, xist uma colisão na posição d T, ntr b do padrão c do txto. Logo, o padrão dv sr dslocado para a dirita até o primiro caractr no padrão qu casa com c. O procsso é rptido até ncontrar um casamnto a partir da posição 6 d T. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção BM - Hurística Casamnto Ao movr o padrão para a dirita, faça-o casar com o pdaço do txto antriormnt casado. Ex.: P ={cacbac no txto T ={aabcaccacbac c a c b a c a a b c a c c a c b a c c a c b a c c a c b a c Novamnt, a partir da posição 5, da dirita para a squrda, xist uma colisão na posição d T, ntr o b do padrão o c do txto. Escolha da Hurística O algoritmo BM scolh a hurística qu provoca o maior dslocamnto do padrão. Esta scolha implica m ralizar uma comparação ntr dois intiros para cada caractr lido do txto, pnalizando o dsmpnho do algoritmo com rlação a tmpo d procssamnto. Várias propostas d simplificação ocorrram ao longo dos anos. As qu produzm os mlhors rsultados são as qu considram apnas a hurística ocorrência. Nst caso, o padrão dv sr dslocado para a dirita até casar com o pdaço do txto antriormnt casado, no caso ac, dslocando o padrão posiçõs à dirita. O procsso é rptido mais uma vz o casamnto ntr P T ocorr.

11 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Algoritmo Boyr-Moor-Horspool (BMH) A simplificação mais important é dvida a Horspool m 980. Excuta mais rápido do qu o algoritmo BM original. Part da obsrvação d qu qualqur caractr já lido do txto a partir do último dslocamnto pod sr usado para ndrçar a tabla d dslocamntos. Endrça a tabla com o caractr no txto corrspondnt ao último caractr do padrão. BMH - Tabla d Dslocamntos Para pré-computar o padrão o valor inicial d todas as ntradas na tabla d dslocamntos é fito igual a m. A sguir, apnas para os m primiros caractrs do padrão são usados para obtr os outros valors da tabla. Formalmnt, d[x] = min{j tal qu j = m ( j < m & P[m j ] = x). Ex.: Para o padrão P ={tst, os valors d d são d[t] =, d[] =, d[s] =, todos os outros valors são iguais ao valor d P, nss caso m = 5. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. BMH - Implmntação public static void bmh ( String T, int n, String P, int m) { / / Pré-procssamnto do padrão int d[ ] = nw int [maxchar] ; for ( int j = 0; j < maxchar; j ++) d[ j ] = m; for ( int j = 0; j < (m ); j ++) d[( int )P.charAt ( j )] = m j ; int i = m ; whil ( i < n) { / / Psquisa int k = i ; int j = m ; whil ( ( j >= 0) && (T.charAt (k) == P.charAt ( j ) ) ) { j ; k ; if ( j < 0) Systm. out. println ( "Casamnto na posicao : " + (k + )); i = i + d[( int )T.charAt ( i ) ] ; d[(int)t.charat(i)] quival ao ndrço na tabla d do caractr qu stá na i-ésima posição no txto, a qual corrspond à posição do último caractr d P. Algoritmo BMHS - Boyr-Moor-Horspool-Sunday Sunday (990) aprsntou outra simplificação important para o algoritmo BM, ficando conhcida como BMHS. Variant do BMH: ndrçar a tabla com o caractr no txto corrspondnt ao próximo caractr após o último caractr do padrão, m vz d dslocar o padrão usando o último caractr como no algoritmo BMH. Para pré-computar o padrão, o valor inicial d todas as ntradas na tabla d dslocamntos é fito igual a m +. A sguir, os m primiros caractrs do padrão são usados para obtr os outros valors da tabla. Formalmnt d[x] = min{j tal qu j = m ( j m & P[m j] = x). Para o padrão P = tst, os valors d d são d[t] =, d[] =, d[s] =, todos os outros valors são iguais ao valor d P +.

12 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção BMHS - Implmntação O pré-procssamnto do padrão ocorr nas duas primiras linhas do código. A fas d psquisa é constituída por um anl m qu i varia d m até n, com incrmntos d[(int)t.charat(i + )], o qu quival ao ndrço na tabla d do caractr qu stá na i + -ésima posição no txto, a qual corrspond à posição do último caractr d P. public static void bmhs ( String T, int n, String P, int m) { / / Pré-procssamnto do padrão int d[ ] = nw int [maxchar] ; for ( int j = 0; j < maxchar; j ++) d[ j ] = m + ; for ( int j = 0; j < m; j ++) d[( int )P.charAt ( j )] = m j ; int i = m ; whil ( i < n) { / / Psquisa int k = i ; int j = m ; whil ( ( j >= 0) && (T.charAt (k) == P.charAt ( j ) ) ) { j ; k ; if ( j < 0) Systm. out. println ( "Casamnto na posicao : " + (k + )); i = i + d[( int )T.charAt ( i +)]; BH - Anális Os dois tipos d dslocamnto (ocorrência casamnto) podm sr pré-computados com bas apnas no padrão no alfabto. Assim, a complxidad d tmpo d spaço para sta fas é O(m + c). O pior caso do algoritmo é O(nm). O mlhor caso o caso médio para o algoritmo é O(n/m), um rsultado xclnt pois xcuta m tmpo sublinar. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção BMH - Anális O dslocamnto ocorrência também pod sr pré-computado com bas apnas no padrão no alfabto. A complxidad d tmpo d spaço para ssa fas é O(m + c). Para a fas d psquisa, o pior caso do algoritmo é O(nm), o mlhor caso é O(n/m) o caso sprado é O(n/m), s c não é pquno m não é muito grand. BMHS - Anális Na variant BMHS, su comportamnto assintótico é igual ao do algoritmo BMH. Entrtanto, os dslocamntos são mais longos (podndo sr iguais a m + ), lvando a saltos rlativamnt maiors para padrõs curtos. Por xmplo, para um padrão d tamanho m =, o dslocamnto é igual a m quando não há casamnto.

13 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Casamnto Aproximado O casamnto aproximado d cadias prmit opraçõs d insrção, substituição rtirada d caractrs do padrão. Ex.: Três ocorrências do padrão tst m qu os casos d insrção, substituição, rtirada d caractrs no padrão acontcm:. um spaço é insrido ntr o trciro quarto caractrs do padrão;. o último caractr do padrão é substituído plo caractr a;. o primiro caractr do padrão é rtirado. ts t tsta st os tsts tstam sts alunos... Distância d Edição É númro k d opraçõs d insrção, substituição rtirada d caractrs ncssário para transformar uma cadia x m outra cadia y. d(p, P ): distância d dição ntr duas cadias P P ; é o mnor númro d opraçõs ncssárias para convrtr P m P, ou vic vrsa. Ex.: d(tst, stnd) =, valor obtido por mio d uma rtirada do primiro t d P a insrção dos caractrs nd ao final d P. O problma do casamnto aproximado d cadias é o d ncontrar todas as ocorrências m T d cada P qu satisfaz d(p, P ) k. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Casamnto Aproximado A busca aproximada só faz sntido para 0 < k < m, pois para k = m toda subcadia d comprimnto m pod sr convrtida m P por mio da substituição d m caractrs. O caso m qu k = 0 corrspond ao casamnto xato d cadias. O nívl d rro α = k/m, fornc uma mdida da fração do padrão qu pod sr altrado. Em gral α < / para a maioria dos casos d intrss. Casamnto aproximado d cadias, ou casamnto d cadias prmitindo rros: um númro limitado k d opraçõs (rros) d insrção, d substituição d rtirada é prmitido ntr P suas ocorrências m T. A psquisa com casamnto aproximado é modlado por autômato não-dtrminista. O algoritmo d casamnto aproximado d cadias usa o parallismo d bit. Exmplo d Autômato para Casamnto Aproximado P ={tst k = : (a)insrção; (b)substituição (c)rtirada. (a) (b) (c) t s t 0 5 t s t 0 5 t s t 0 s ε s ε ε ε ε Casamnto d caractr é rprsntado por uma arsta horizontal. Avançamos m P T. O slf-loop prmit qu uma ocorrência s inici m qualqur posição m T. s t t t

14 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Exmplo d Autômato para Casamnto Aproximado Exmplo d Autômato para Casamnto Aproximado Uma arsta vrtical insr um caractr no padrão. Avançamos m T mas não m P. t s t 0 5 Uma arsta diagonal sólida substitui um caractr. Avançamos m T P. s t s t 0 5 s t 5 Uma arsta diagonal tracjada rtira um caractr. Avançamos m P mas não m T (transição-ɛ) t s t 0 ε ε ε ε ε s t t P ={tst K =. As três opraçõs d distância d dição stão juntas m um único autômato: Linha : casamnto xato (k = 0); Linha : casamnto aproximado prmitindo um rro (k = ); Linha : casamnto aproximado prmitindo dois rros (k = ) t s t ε ε ε ε ε t s t ε ε ε ε ε t Uma vz qu um stado no autômato stá ativo, todos os stados nas linhas sguints na msma coluna também stão ativos. s t Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Shift-And para Casamnto Aproximado Utiliza parallismo d bit. Simula um autômato não-dtrminista. Empacota cada linha j (0 < j k) do autômato não-dtrminista m uma palavra R j difrnt do computador. Para cada novo caractr lido do txto todas as transiçõs do autômato são simuladas usando opraçõs ntr as k + máscaras d bits. Todas as k + máscaras d bits têm a msma strutura assim o msmo bit é alinhado com a msma posição no txto. Shift-And para Casamnto Aproximado Na posição i do txto, os novos valors R j, 0 < j k, são obtidos a partir dos valors corrnts R j : R 0 = ((R 0 >> ) 0 m ) & M[T[i]] R j = ((R j >> ) & M[T[i]]) R j (R j >> ) (R j >> ) 0 m, ond M é a tabla do algoritmo Shift-And para casamnto xato. A psquisa inicia com R j = j 0 m j. R 0 quival ao algoritmo Shift-And para casamnto xato. As outras linhas R j rcbm s (stados ativos) também d linhas antriors. Considrando um automato para casamnto aproximado, a fórmula para R xprssa: arstas horizontais indicando casamnto; vrticais indicando insrção; diagonais chias indicando substituição; diagonais tracjadas indicando rtirada.

15 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Shif-And para Casamnto Aproximado - Implmntação void Shift-And-Aproximado (P = p 0p... p m, T = t 0t... t n, k) / / Pré-procssamnto for (c ) M[c] = 0 m ; for ( j = 0; j < m; j ++) M[p j ] = M[p j ] 0 j 0 m j ; / / Psquisa for ( j = 0; j <= k ; j ++) R j = j 0 m j ; for ( i = 0; i < n; i ++) Rant = R 0 ; Rnovo = ((Rant >> ) 0 m ) & M[T[i]]; R 0 = Rnovo; for ( j = ; j <= k ; j++) Rnovo = ((R j >> & M[T[i]]) Rant ((Rant Rnovo) >> ); Rant = R j ; R j = Rnovo 0 m ; if (Rnovo & 0 m 0 m ) "Casamnto na posicao i"; Shif-And p/ Casam. Aprox. - Exmplo Padrão: tst. Txto: os tsts tstam. Prmitindo um rro (k = ) d insrção). R 0 = (R 0 >> ) 0 m &M[T[i]] R = (R >> )&M[T[i]] R 0 (0 m ) Uma ocorrência xata na posição 8 ( ) duas, prmitindo uma insrção, nas posiçõs 8 ( s, rspctivamnt). Txto (R 0 >> ) 0 m R 0 R >> R o s t s t s t s t a m Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Shif-And p/ Casam. Aprox. - Exmplo Padrão: tst. Txto: os tsts tstam. Prmitindo um rro d insrção, um d rtirada um d substituição. R 0 = (R 0 >> ) 0 m &M[T[i]] R = (R >> )&M[T[i]] R 0 (R 0 >> ) (R 0 >> ) (0 m ). Uma ocorrência xata na posição 8 ( ) cinco, prmitindo um rro, nas posiçõs 6, 8,, ( t, s,, t a, rspc.). Txto (R 0 >> ) 0 m R 0 R >> R o s t s t s t s t a m Comprssão - Motivação Explosão d informação txtual disponívl on-lin: Bibliotcas digitais. Sistmas d automação d scritórios. Bancos d dados d documntos. World-Wid Wb. Somnt a Wb tm hoj bilhõs d páginas státicas disponívis. Cada bilhão d páginas ocupando aproximadamnt 0 trabyts d txto corrido. Em stmbro d 00, a máquina d busca Googl ( dizia tr mais d,5 bilhõs d páginas státicas m su banco d dados.

16 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Caractrísticas ncssárias para sistmas d rcupração d informação Métodos rcnts d comprssão têm prmitido:. Psquisar dirtamnt o txto comprimido mais rapidamnt do qu o txto original.. Obtr maior comprssão m rlação a métodos tradicionais, grando maior conomia d spaço.. Acssar dirtamnt qualqur part do txto comprimido sm ncssidad d dscomprimir todo o txto dsd o início (Moura, Navarro, Ziviani Baza-Yats, 000; Ziviani, Moura, Navarro Baza-Yats, 000). Compromisso spaço X tmpo: vncr-vncr. Porqu Usar Comprssão Comprssão d txto - maniras d rprsntar o txto original m mnos spaço: Substituir os símbolos do txto por outros qu possam sr rprsntados usando um númro mnor d bits ou byts. Ganho obtido: o txto comprimido ocupa mnos spaço d armaznamnto mnos tmpo para sr lido do disco ou sr transmitido por um canal d comunicação para sr psquisado. Prço a pagar: custo computacional para codificar dcodificar o txto. Avanço da tcnologia: D acordo com Pattrson Hnnssy (995), m 0 anos, o tmpo d acsso a discos magnéticos tm s mantido praticamnt constant, nquanto a vlocidad d procssamnto aumntou aproximadamnt mil vzs mlhor invstir mais podr d computação m comprssão m troca d mnos spaço m disco ou mnor tmpo d transmissão. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Razão d Comprssão Dfinida pla porcntagm qu o arquivo comprimido rprsnta m rlação ao tamanho do arquivo não comprimido. Exmplo: s o arquivo não comprimido possui 00 byts o arquivo comprimido rsultant possui 0 byts, ntão a razão d comprssão é d 0%. Utilizada para mdir O ganho m spaço obtido por um método d comprssão. Outros Importants Aspctos a Considrar Além da conomia d spaço, dv-s considrar: Vlocidad d comprssão d dscomprssão. Possibilidad d ralizar casamnto d cadias dirtamnt no txto comprimido. Prmitir acsso dirto a qualqur part do txto comprimido iniciar a dscomprssão a partir da part acssada: Um sistma d rcupração d informação para grands colçõs d documntos qu stjam comprimidos ncssitam acsso dirto a qualqur ponto do txto comprimido.

17 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Comprssão d Txtos m Linguagm Natural Um dos métodos d codificação mais conhcidos é o d Huffman (95): A idéia do método é atribuir códigos mais curtos a símbolos com frqüências altas. Um código único, d tamanho variávl, é atribuído a cada símbolo difrnt do txto. As implmntaçõs tradicionais do método d Huffman considram caractrs como símbolos. Para aliar as ncssidads dos algoritmos d comprssão às ncssidads dos sistmas d rcupração d informação apontadas acima, dv-s considrar palavras como símbolos a srm codificados. Métodos d Huffman basados m caractrs comprimm o txto para aproximadamnt 60%. Métodos d Huffman basados m palavras comprimm o txto para valors pouco acima d 5%. Vantagns dos Métodos d Huffman Basados m Palavras Prmitm acsso randômico a palavras dntro do txto comprimido. Considrar palavras como símbolos significa qu a tabla d símbolos do codificador é xatamnt o vocabulário do txto. Isso prmit uma intgração natural ntr o método d comprssão o arquivo invrtido. Prmitm acssar dirtamnt qualqur part do txto comprimido sm ncssidad d dscomprimir todo o txto dsd o início. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Família d Métodos d Comprssão Ziv-Lmpl Substitui uma sqüência d símbolos por um apontador para uma ocorrência antrior daqula sqüência. A comprssão é obtida porqu os apontadors ocupam mnos spaço do qu a sqüência d símbolos qu ls substitum. Os métodos Ziv-Lmpl são populars pla sua vlocidad, conomia d mmória gnralidad. Já o método d Huffman basado m palavras é muito bom quando a cadia d caractrs constitui txto m linguagm natural. Dsvantagns dos Métodos d Ziv-Lmpl para Ambint d Rcupração d Informação É ncssário iniciar a dcodificação dsd o início do arquivo comprimido Acsso randômico muito caro. É muito difícil psquisar no arquivo comprimido sm dscomprimir. Uma possívl vantagm do método Ziv-Lmpl é o fato d não sr ncsário armaznar a tabla d símbolos da manira com qu o método d Huffman prcisa. No ntanto, isso tm pouca importância m um ambint d rcupração d informação, já qu s ncssita o vocabulário do txto para criar o índic prmitir a psquisa ficint.

18 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Comprssão d Huffman Usando Palavras Técnica d comprssão mais ficaz para txtos m linguagm natural. O método considra cada palavra difrnt do txto como um símbolo. Conta suas frqüências gra um código d Huffman para as palavras. A sguir, comprim o txto substituindo cada palavra plo su código. Assim, a comprssão é ralizada m duas passadas sobr o txto:. Obtnção da frqüência d cada palavra difrnt.. Ralização da comprssão. Forma Eficint d Lidar com Palavras Sparadors Um txto m linguagm natural é constituído d palavras d sparadors. Sparadors são caractrs qu aparcm ntr palavras: spaço, vírgula, ponto, ponto vírgula, intrrogação, assim por diant. Uma forma ficint d lidar com palavras sparadors é rprsntar o spaço simpls d forma implícita no txto comprimido. Nss modlo, s uma palavra é sguida d um spaço, ntão, somnt a palavra é codificada. Snão, a palavra o sparador são codificados sparadamnt. No momnto da dcodificação, supõ-s qu um spaço simpls sgu cada palavra, a não sr qu o próximo símbolo corrsponda a um sparador. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Comprssão usando codificação d Huffman Exmplo: para cada rosa rosa, uma rosa é uma rosa a) para cada rosa, c) rosa 0 0 para cada, é uma uma é b) 0 para d) cada 0 rosa 0 0, rosa para cada, é ) f) 0 6 rosa 0 0 rosa 6 uma 0 0 uma para cada, é 0 0 uma uma para cada, é OBS: O algoritmo d Huffman é uma abordagm gulosa. é Árvor d Huffman O método d Huffman produz a árvor d codificação qu minimiza o comprimnto do arquivo comprimido. Existm divrsas árvors qu produzm a msma comprssão. Por xmplo, trocar o filho à squrda d um nó por um filho à dirita lva a uma árvor d codificação altrnativa com a msma razão d comprssão. Entrtanto, a scolha prfrncial para a maioria das aplicaçõs é a árvor canônica. Uma árvor d Huffman é canônica quando a altura da subárvor à dirita d qualqur nó nunca é mnor qu a altura da subárvor à squrda.

19 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Árvor d Huffman A rprsntação do código na forma d árvor facilita a visualização. Sugr métodos d codificação dcodificação triviais: Codificação: a árvor é prcorrida mitindo bits ao longo d suas arstas. Dcodificação: os bits d ntrada são usados para slcionar as arstas. Essa abordagm é inficint tanto m trmos d spaço quanto m trmos d tmpo. Algoritmo Basado na Codificação Canônica com Comportamnto Linar m Tmpo Espaço O algoritmo é atribuído a Moffat Katajainn (995). Calcula os comprimntos dos códigos m lugar dos códigos propriamnt ditos. A comprssão atingida é a msma, indpndntmnt dos códigos utilizados. Após o cálculo dos comprimntos, há uma forma lgant ficint para a codificação a dcodificação. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção O Algoritmo A ntrada do algoritmo é um vtor A contndo as frqüências das palavras m ordm não-crscnt. Frqüências rlativas à fras xmplo: para cada rosa rosa, uma rosa é uma rosa Durant sua xcução, são utilizados divrsos vtors logicamnt distintos, mas capazs d coxistirm no msmo vtor das frqüências. O algoritmo divid-s m três fass:. Combinação dos nós.. Convrsão do vtor no conjunto das profundidads dos nós intrnos.. Calculo das profundidads dos nós folhas. Primira Fas - Combinação dos nós a) b) c) n Frqüências dos nós folhas Pso da árvor Folha Posiçõs disponívis Frqüências Prox Psos dos nós intrnos Índics pais nós intrnos Índics pais nós intrnos n Raiz A primira fas é basada m duas obsrvaçõs:. A frqüência d um nó só prcisa sr mantida até qu l sja procssado.. Não é prciso mantr apontadors para os pais dos nós folhas, pois ls podm sr infridos. Exmplo: nós intrnos nas profundidads [0,,,, ] triam nós folhas nas profundidads [,,,,, ]. n

20 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Psudocódigo para a Primira Fas void primirafas (A, n) { raiz = n; folha = n; for ( prox = n; prox >= ; prox ) { / / Procura Posição if ( ( não xist folha ) ( ( raiz > prox) && (A[ raiz ] <= A[ folha ] ) ) ) { / / Nó intrno A[prox] = A[ raiz ] ; A[ raiz ] = prox ; raiz ; ls { / / Nó folha A[prox] = A[ folha ] ; folha ; / / Atualiza Frqüências if ( ( não xist folha ) ( ( raiz > prox) && (A[ raiz ] <= A[ folha ] ) ) ) { / / Nó intrno A[prox] = A[prox] + A[ raiz ] ; A[ raiz ] = prox ; raiz ; ls { / / Nó folha A[prox] = A[prox] + A[ folha ] ; folha ; Exmplo d procssamnto da primira fas a) b) c) d) ) f) g) h) i) j) k) 5 6 Prox Raiz Folha Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Sgunda Fas - Convrsão do vtor no conjunto das profundidads dos nós intrnos a) n Psudocódigo para a Sgunda Fas void sgundafas (A, n) { A[] = 0; for ( prox = ; prox <= n; prox++) A[prox] = A[A[prox]] + ; b) Pso da árvor Índics pais nós intrnos Prox Profundidad Índics pais dos nós intrnos nós intrnos n Profundidads dos nós intrnos obtida com a sgunda fas tndo como ntrada o vtor xibido na ltra k) da transparência 65: 0 c) n Profundidad dos nós intrnos

21 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Trcira Fas - Calculo das profundidads dos nós folhas a) b) c) Comprimnto dos códigos n Profundidad dos nós intrnos Prox Posiçõs disponívis Raiz Comprimnto dos códigos n Profundidad dos nós intrnos n Psudocódigo para a Trcira Fas void trcirafas (A, n) { disp = ; u = 0; h = 0; raiz = ; prox = ; whil ( disp > 0) { whil ( ( raiz <= n) && (A[ raiz ] == h) ) { u++; raiz ++; whil ( disp > u) { A[prox] = h; prox++; disp ; disp = u; h++; u = 0; Aplicando-s a Trcira Fas sobr: 0 Os comprimntos dos códigos m númro d bits são obtidos: Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Cálculo do comprimnto dos códigos a partir d um vrtor d frqüências void calculacompcodigo (A, n) { primirafas (A, n); sgundafas (A, n); trcirafas (A, n); Código Canônico Propridads:. Os comprimntos dos códigos obdcm ao algoritmo d Huffman.. Códigos d msmo comprimnto são intiros conscutivos. A partir dos comprimntos obtidos, o cálculo dos códigos propriamnt dito é trivial: o primiro código é composto apnas por zros, para os dmais, adiciona-s ao código antrior faz-s um dslocamnto à squrda para obtr-s o comprimnto adquado quando ncssário. Codificação Canônica Obtida: i Símbolo Código Canônico rosa 0 uma 0 para 00 cada 0 5, 0 6 é

22 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Elaboração d Algoritmos Eficints para a Codificação para a Dcodificação Os algoritmos são basados na sguint obsrvação: Códigos d msmo comprimnto são intiros conscutivos. Os algoritmos são basados no uso d dois vtors com maxcompcod lmntos,sndo maxcompcod o comprimnto do maior código. Vtors bas offst Vtor bas: indica, para um dado comprimnto c, o valor intiro do primiro código com ss comprimnto. O vtor Bas é calculado pla rlação: 8 < 0 s c =, bas[c] = : (bas[c ] + w c ) caso contrário, sndo w c o númro d códigos com comprimnto c. offst indica o índic no vocabulário da primira palavra d cada comprimnto d código c. Vtors bas offst para a tabla da transparência 7: c bas[c] offst[c] 0 6 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Psudocódigo para Codificação Codigo codifica ( i, maxcompcod) { c = ; whil ( ( c + <= maxcompcod) && ( i >= offst [c + ])) c++; codigo = i offst [c] + bas[c ] ; rturn ( codigo, c); Obtnção do código: O método d codificação rcb como parâmtros o índic i do símbolo a sr codificado o comprimnto maxcompcod dos vtors bas offst. Exmplo d Codificação Para a palavra i = ( cada ):. Vrifica-s qu é um código d comprimnto.. Vrifica-s também qu é o sgundo código com ss comprimnto.. Assim, su código é ( offst[] + bas[]), o qu corrspond a 0 m binário. No anl whil é fito o cálculo do comprimnto c d código a sr utilizado. A sguir, basta sabr qual a ordm do código para o comprimnto c (i offst[c]) somar ss valor à bas[c].

23 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Psudocódigo para Dcodificação int dcodifica (maxcompcod) { c = ; codigo = lbit (arqcomp); whil ( ( codigo << ) >= bas[c + ] && ( c + <= maxcompcod ) ) { codigo = (codigo < < ) lbit (arqcomp) ; c++; i = codigo bas[c] + offst [c ] ; rturn i ; O programa rcb como parâmtro o comprimnto maxcompcod dos vtors bas offst. Na dcodificação, o arquivo d ntrada é lido bit-a-bit, adicionando-s os bits lidos ao código comparando-o com o vtor Bas. O anl whil mostra como idntificar o código a partir d uma posição do arquivo comprimido. Exmplo d Dcodificação Dcodificação da sqüência d bits 0 : c LBit Codigo Codigo << Bas[c + ] or = or 0 = or = A primira linha da tabla rprsnta o stado inicial do anl whil quando já foi lido o primiro bit da sqüência, o qual foi atribuído à variávl codigo. A linha dois sguints rprsntam a situação do anl whil após cada rspctiva itração. No caso da linha dois da tabla, o sgundo bit da sqüência foi lido (bit ) a variávl codigo rcb o código antrior dslocado à squrda d um bit sguido da opração or com o bit lido. D poss do código, bas offst são usados para idntificar qual o índic i da palavra no vocabulário, sndo i = codigo bas[c] + offst[c]. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Psudocódigo para ralizar a comprssão Psudocódigo para ralizar a dscomprssão void comprssao (nomarqtxt, nomarqcomp) { arqcomp = nw RandomAccssFil (nomarqcomp, "rws" ); arqtxt = nw BuffrdRadr (nw FilRadr(nomArqTxt) ) ; / / Primira tapa String palavra = null ; TablaHash vocabulario ; whil ( xistirm palavras ) { palavra = proximapalavra ( arqtxt ); itmvoc = vocabulario.psquisa ( palavra ); if (itmvoc!= null ) itmvoc. frq = itmvoc. frq + ; ls vocabulario. insr ( palavra ); / / Sgunda tapa A[ ] = ordnaporfrquncia ( vocabulario ) ; calculacompcodigo (A, n); maxcompcod = constroivtors (A, n) ; gravavocabulario (A, arqcomp); / / Trcira tapa whil ( xistirm palavras ) { palavra = proximapalavra ( arqtxt ); itmvoc = vocabulario.psquisa ( palavra ); codigo = codifica (itmvoc.ordm, maxcompcod); scrv ( codigo, maxcompcod); void dscomprssao (nomarqtxt, nomarqcomp) { arqcomp = nw RandomAccssFil (nomarqcomp, "rws" ); arqtxt = nw BuffrdWritr (nw FilWritr (nomarqtxt) ) ; int maxcompcod = lvtors ( ) ; String vocabulario [ ] = lvocabulario ( ) ; whil ( ( i = dcodifica (maxcompcod)) >= 0) { if ( ( palavra antrior não é dlimitador) && (vocabulario[i] não é dlimitador)) arqtxt. writ ( " " ); arqtxt. writ ( vocabulario [ i ] ) ;

24 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Codificação d Huffman Usando Palavras - Anális A rprsntação do código d Huffman na forma d uma árvor é inficint m trmos d spaço d tmpo (não é usado na prática). Codificação canônica: forma mais ficint basada nos comprimntos dos códigos m vz dos códigos propriamnt ditos (Moffat Katajainn - 995). Fito in situ a partir d um vtor A contndo as frqüências das palavras m ordm não crscnt a um custo O(n) m tmpo m spaço. O algoritmo rqur apnas os dois vtors bas offst d tamanho maxcompcod, sndo maxcompcod o comprimnto do maior código. A dcodificação é também muito ficint pois apnas os vtors bas offst são consultados. Não há ncssidad d ralizar a dcodificação bit a bit, como na árvor d Huffman. Codificação d Huffman Usando Byts O método original proposto por Huffman (95) tm sido usado como um código binário. Moura, Navarro, Ziviani Baza-Yats (000) modificaram a atribuição d códigos d tal forma qu uma sqüência d byts é associada a cada palavra do txto. Consqüntmnt, o grau d cada nó passa d para 56. Essa vrsão é chamada d código d Huffman plno. Outra possibilidad é utilizar apnas 7 dos 8 bits d cada byt para a codificação, a árvor passa ntão a tr grau 8. Nss caso, o oitavo bit é usado para marcar o primiro byt do código da palavra, sndo chamado d código d Huffman com marcação. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Exmplo d Códigos Plnos com Marcação O código d Huffman com marcação ajuda na psquisa sobr o txto comprimido. Exmplo: Código plno para a palavra uma com byts Código com marcação para a palavra uma com byts Not qu o primiro byt é 75 = Assim, no código com marcação o oitavo bit é quando o byt é o primiro do código, snão l é 0. Árvor d Huffman orintada a byts A construção da árvor d Huffman orintada a byts pod ocasionar o aparcimnto d nós intrnos não totalmnt prnchidos quando a árvor não é binária: a) Árvor inficint 56 lmntos b) Árvor ótima 5 nós vazios 56 lmntos lmntos 5 nós vazios 56 lmntos 5 lmntos Na Figura, o alfabto possui 5 símbolos (nós folhas), todos com a msma frqüência d ocorrência. O sgundo nívl tm 5 spaços vazios qu podriam sr ocupados com símbolos, mudando o comprimnto d sus códigos d para byt.

25 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Movndo Nós Vazios para Nívis mais Profundos Um mio d assgurar qu nós vazios smpr ocupm o nívl mais baixo da árvor é combiná-los com os nós d mnors frqüências. O objtivo é movê-los para o nívl mais profundo da árvor. Para isso, dvmos slcionar o númro d símbolos qu srão combinados com os nós vazios. Essa slção é dada pla quação + ((n basnum) mod (basnum )). No caso da Figura da transparência antrior é igual a + ((5 56) mod 55) =. Class HuffmanByt packag cap8; import java. io. ; import cap5.ndabrto.tablahash; import cap.ordnacaointrna.ordnacao; public class HuffmanByt { privat int basnum; privat int bas[ ], offst [ ] ; privat RandomAccssFil arqcomp; / / Arquivo comprimido privat String nomarqtxt; / / Nom do arquivo txto a sr comprimido privat String nomarqdlim; / / Nom do arquivo qu contém os dlimitadors privat TablaHash vocabulario ; privat static class Codigo { int codigo ; int c ; / / Comprimnto do código public HuffmanByt ( String nomarqdlim, int basnum, int m, int maxtamchav) throws Excption { this.basnum = basnum; this.bas = null ; this. offst = null ; this.nomarqtxt = null ; this.nomarqdlim = nomarqdlim; this. vocabulario = nw TablaHash (m, maxtamchav); public void comprssao ( String nomarqtxt, String nomarqcomp) throws Excption { public void dscomprssao ( String nomarqtxt, String nomarqcomp) throws Excption { Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Gnralização do Cálculo dos Comprimntos dos Códigos Gnralização do Cálculo dos Comprimntos dos Códigos privat void calculacompcodigo (ItmVoc [ ] A, int n) { int rsto = 0; if (n > (this.basnum )) { rsto = + ((n this.basnum) % (this.basnum )); if ( rsto < ) rsto = this.basnum; ls rsto = n ; / / noint: Númro d nós intrnos int noint = + ((n rsto ) / ( this.basnum )); int frqn = (( Intgr)A[n].rcupraChav ( ) ). intvalu ( ) ; for ( int x = (n ); x >= (n rsto + ); x ) { int frqx = (( Intgr)A[x ].rcuprachav ( ) ). intvalu ( ) ; frqn = frqn + frqx ; A[n]. altrachav (nw Intgr ( frqn ) ) ; / / Primira Fas int raiz = n; int folha = n rsto ; int prox; for ( prox = n ; prox >= (n noint + ); prox ) { / / Procura Posição int frqraiz = (( Intgr)A[ raiz ].rcuprachav ( ) ). intvalu ( ) ; if ( ( folha < ) ( ( raiz > prox) && ( frqraiz <= ((Intgr)A[ folha ].rcuprachav( ) ). intvalu ( ) ) ) ) { / / Nó intrno A[prox ]. altrachav (nw Intgr ( frqraiz ) ) ; A[ raiz ]. altrachav (nw Intgr ( prox ) ) ; raiz ; ls { / / Nó folha int frqfolha = (( Intgr)A[ folha ].rcuprachav ( ) ). intvalu ( ) ; A[prox ]. altrachav (nw Intgr ( frqfolha ) ) ; folha ; / / Atualiza Frqüências for ( int x = ; x <= (this.basnum ); x++) { frqraiz = (( Intgr)A[ raiz ].rcuprachav ( ) ). intvalu ( ) ; int frqprox = (( Intgr)A[prox ].rcuprachav ( ) ). intvalu ( ) ; if ( ( folha < ) ( ( raiz > prox) && ( frqraiz <=((Intgr)A[ folha ].rcuprachav( ) ). intvalu ( ) ) ) ) { / / Nó intrno A[prox ]. altrachav (nw Intgr ( frqprox + frqraiz ) ) ; A[ raiz ]. altrachav (nw Intgr ( prox ) ) ; raiz ; ls { / / Nó folha int frqfolha = (( Intgr)A[ folha ].rcuprachav ( ) ). intvalu ( ) ; A[prox ]. altrachav(nw Intgr(frqprox + frqfolha ) ) ; folha ; / / Sgunda Fas A[ raiz ]. altrachav (nw Intgr (0)); for ( prox = raiz + ; prox <= n; prox++) { int pai = (( Intgr)A[prox ].rcuprachav ( ) ). intvalu ( ) ; int profundidadpai = (( Intgr)A[ pai ].rcuprachav ( ) ). intvalu ( ) ; A[prox ]. altrachav (nw Intgr ( profundidadpai + ));

26 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Gnralização do Cálculo dos Comprimntos dos Códigos / / Trcira Fas int disp = ; int u = 0; int h = 0; prox = ; whil ( disp > 0) { whil ( ( raiz <= n) && ((( Intgr)A[ raiz ].rcuprachav( ) ). intvalu() == h) ) {u++; raiz++; whil ( disp > u) { A[prox ]. altrachav (nw Intgr (h) ) ; prox++; disp ; if ( prox > n) { u = 0; brak; disp = this.basnum u; h = h + ; u = 0; OBS: basnum pod sr usada para trabalharmos com quaisqur bass numéricas mnors ou iguais a um byt. Por xmplo, para a codificação plna o valor é 56 para a codificação com marcação o valor é 8. Mudanças m Rlação ao Psudocódigo Aprsntado A mudança maior stá no código insrido ants da primira fas para liminar o problma causado por nós intrnos da árvor não totalmnt prnchidos. Na primira fas, as basnum árvors d mnor custo são combinadas a cada passo, m vz d duas como no caso da codificação binária: Isso é fito plo anl for introduzido na part qu atualiza frqüências na primira fas. A sgunda fas não sofr altraçõs. A trcira fas rcb a variávl disp para indicar quantos nós stão disponívis m cada nívl. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Codificação orintada a byts Dcodificação orintada a byts privat Codigo codifica ( int ordm, int maxcompcod) { Codigo cod = nw Codigo ( ) ; cod.c = ; whil ( (cod.c + <= maxcompcod) && (ordm >= this. offst [cod.c + ])) cod.c++; cod.codigo = ordm this. offst [cod.c] + this.bas[cod.c ] ; rturn cod; OBS: a codificação orintada a byts não rqur nnhuma altração m rlação à codificação usando bits privat int dcodifica ( int maxcompcod) throws Excption { int logbas = ( int )(Math. log(this.basnum)/math. log ()); int c = ; int codigo = this.arqcomp.rad ( ) ; if ( codigo < 0) rturn codigo ; / / Fim d arquivo Rmov o bit d marca- if (logbas == 7) codigo = codigo 8; / / cao whil ( ( ( c + ) <= maxcompcod) && ((codigo << logbas) >= this.bas[c+])) { int codigotmp = this.arqcomp.rad ( ) ; codigo = (codigo << logbas ) codigotmp; c++; rturn ( codigo this.bas[c] + this. offst [c ] ) ; Altraçõs:. Prmitir a litura byt a byt do arquivo comprimido, m vz d bit a bit. m rlação ao númro d bits qu dvm sr dslocados à squrda para s ncontrar o comprimnto c do código, o qual indxa os vtors bas offst.. O númro d bits qu dvm sr dslocados à squrda para s ncontrar o comprimnto c, o qualindxa os vtors bas offst, é dado por: log BasNum

27 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Cálculo dos Vtors bas offst O cálculo do vtor offst não rqur altração alguma. Para gnralizar o cálculo do vtor bas, basta substituir o fator por basnum, como abaixo: 8 < 0 s c =, bas[c] = : basnum (bas[c ] + w c ) caso contrário. Construção dos Vtors bas offst privat int constroivtors (ItmVoc A[ ], int n) throws Excption { int maxcompcod = (( Intgr)A[n].rcupraChav( ) ). intvalu ( ) ; int wcs[ ] = nw int [maxcompcod + ]; / / Ignora a posição 0 this. offst = nw int [maxcompcod + ]; / / Ignora a posição 0 this.bas = nw int [maxcompcod + ]; / / Ignora a posição 0 for ( int i = ; i <= maxcompcod; i ++) wcs[ i ] = 0; for ( int i = ; i <= n; i ++) { int frq = (( Intgr)A[ i ].rcuprachav( ) ). intvalu ( ) ; wcs[ frq]++; this. offst [ frq ] = i wcs[ frq ] + ; this.bas[] = 0; for ( int i = ; i <= maxcompcod; i ++) { this.bas[ i ] = this.basnum ( this.bas[ i ] + wcs[ i ]); if ( this. offst [ i ] == 0) this. offst [ i ] = this. offst [ i ]; / / Salvando as tablas m disco this.arqcomp. writint (maxcompcod); for ( int i = ; i <= maxcompcod; i ++) { this.arqcomp. writint ( this.bas[ i ] ) ; this.arqcomp. writint ( this. offst [ i ] ) ; rturn maxcompcod; Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Extração do próximo símbolo a sr codificado Extração do próximo símbolo a sr codificado packag cap8; import java. u t i l. StringToknizr ; import java. io. ; public class ExtraiPalavra { privat BuffrdRadr arqdlim, arqtxt; privat StringToknizr palavras; privat String dlimitadors, palavraant, palavra; privat boolan Dlimitador (char ch) { rturn ( this. dlimitadors.indxof (ch) >= 0); public ExtraiPalavra ( String nomarqdlim, String nomarqtxt) throws Excption { this.arqdlim = nw BuffrdRadr (nw FilRadr (nomarqdlim) ) ; this. arqtxt = nw BuffrdRadr (nw FilRadr (nomarqtxt) ) ; / / Os dlimitadors dvm star juntos m uma única linha do arquivo this. dlimitadors = arqdlim.radlin() + " \ r \n" ; this. palavras = null ; this. palavra = null ; this.palavraant = " " ; public String proximapalavra ( ) throws Excption{ String palavratmp = " " ; String rsultado = " " ; if ( this. palavra!= null ) { palavratmp = palavra ; palavra = null ; palavraant = palavratmp; rturn palavratmp; if ( palavras == null! palavras.hasmortokns ( ) ) { String linha = arqtxt.radlin ( ) ; if ( linha == null ) rturn null ; linha += " \n" ; this. palavras=nw StringToknizr ( linha, this. dlimitadors,tru ); String aux = this. palavras.nxttokn( ) ; whil ( Dlimitador (aux.charat (0)) && palavras.hasmortokns ( ) ) { palavratmp += aux; aux = this. palavras.nxttokn( ) ; if (palavratmp. lngth () == 0) rsultado = aux; ls { this. palavra = aux; if (palavratmp. lngth () == && palavratmp.quals( " ") && palavraant. lngth () > 0 && palavra. lngth () > 0 &&! Dlimitador ( palavraant.charat (0)) &&! Dlimitador ( palavra.charat (0))) palavratmp = palavratmp. trim ( ) ; rsultado = palavratmp; this.palavraant = rsultado ; rturn rsultado ; public void fchararquivos ( ) throws Excption { this.arqdlim. clos ( ) ; this.arqtxt.clos ( ) ;

28 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Class para rprsntar as informaçõs d uma ntrada do vocabulário packag cap8; import cap.itm ; / / vid Programa?? public class ItmVoc implmnts Itm { privat String palavra; privat int frq, ordm; / / outros componnts do rgistro public ItmVoc ( String palavra, int frq, int ordm) { this. palavra = palavra; this. frq = frq ; this.ordm = ordm; public int compara ( Itm i t ) { ItmVoc itm = (ItmVoc) i t ; if ( this. frq < itm. frq ) rturn ; ls if ( this. frq > itm. frq ) rturn ; rturn 0; public void altrachav ( Objct frq ) { Intgr ch = ( Intgr ) frq ; this. frq = ch. intvalu ( ) ; public Objct rcuprachav ( ) { rturn nw Intgr ( this. frq ) ; public void altraordm ( int ordm) { this.ordm = ordm; public int rcupraordm ( ) { rturn this.ordm; public String palavra ( ) { rturn this. palavra ; Código para Fazr a Comprssão O Código para fazr a comprssão é dividio m três tapas:. Na primira, as palavras são xtraídas do txto a sr comprimido suas rspctivas frqüências são contabilizadas.. Na sgunda, são grados os vtors bas offst, os quais são gravados no arquivo comprimido sguidamnt do vocabulário. Para dlimitar os símbolos do vocabulário no disco, cada um dls é sparado plo caractr zro.. Na trcira, o arquivo txto é prcorrido pla sgunda vz, sndo sus símbolos novamnt xtraídos, codificados gravados no arquivo comprimido. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Código para Fazr a Comprssão Primira tapa da comprssão public void comprssao ( String nomarqtxt, String nomarqcomp) throws Excption { this.nomarqtxt = nomarqtxt; this.arqcomp = nw RandomAccssFil (nomarqcomp, "rws" ); this.primiraetapa ( ) ; int maxcompcod = this.sgundaetapa ( ) ; this. trciraetapa (maxcompcod); this.arqcomp. clos ( ) ; privat void primiraetapa ( ) throws Excption { ExtraiPalavra palavras = nw ExtraiPalavra (nomarqdlim, nomarqtxt); String palavra = null ; whil ( ( palavra = palavras.proximapalavra())! = null ) { / / O primiro spaço dpois da palavra não é codificado if ( palavra.quals ( " " ) ) continu; ItmVoc itmvoc = (ItmVoc) this. vocabulario.psquisa ( palavra ); if ( itmvoc!= null ) { / / Incrmnta frqüência int frq = (( Intgr)itmVoc.rcupraChav ( ) ). intvalu ( ) ; itmvoc.altrachav (nw Intgr ( frq + )); ls { / / Insr palavra com frqüência itmvoc = nw ItmVoc ( palavra,, 0); this. vocabulario. insr ( palavra, itmvoc); palavras.fchararquivos ( ) ;

29 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Sgunda tapa da comprssão privat int sgundaetapa ( ) throws Excption { ItmVoc A[ ] = this.ordnaporfrquncia ( ) ; int n = A. lngth ; this.calculacompcodigo (A, n); int maxcompcod = this. constroivtors (A, n); / / Grava Vocabulário this.arqcomp. writint (n); for ( int i = ; i <= n; i ++) { this.arqcomp.writchars (A[ i ]. palavra ( ) ) ; this.arqcomp.writchar ( \0 ); A[ i ]. altraordm ( i ); rturn maxcompcod; Método para ordnar o vocabulário por frqüência O objtivo dss método é rcuprar as ntradas do vocabulário, armazná-las contigüamnt m um vtor ordnar o vtor obtido na ordm não crscnt pla frqüência das palavras no txto. Para isso, foi criado o oprador rcupraitns, o qual rtorna nas posiçõs d 0 a n do vtor itns as n rfrências às ntradas do vocabulário, as quais são objtos do tipo ItmVoc. Rcuprados os itns, o método ordnaporfrquncia copia as rfrências aos objtos do tipo ItmVoc qu rprsntam as ntradas do vocabulário do vtor aux para as posiçõs d a n do vtor A. Por fim, na class ItmVoc o vtor A é ordnado d forma não crscnt por suas rspctivas frqüências d ocorrência (Quicksort). O método ordnaporfrquncia rtorna o vtor ordnado. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Método para ordnar o vocabulário por frqüência Oprador para rcuprar os objtos contidos m uma tabla hash privat ItmVoc [ ] ordnaporfrquncia ( ) { Objct aux[ ] = this. vocabulario. rcupraitns ( ) ; ItmVoc A[ ] = nw ItmVoc[aux. lngth+]; / / Ignora a posição 0 for ( int i = 0; i < aux. lngth ; i ++) A[ i +] = (ItmVoc)aux[ i ] ; Ordnacao. quicksort (A, aux. lngth ); rturn A; public Objct [ ] rcupraitns ( ) { int n = 0; for ( int i = 0; i < this.m; i++) if ( this. tabla [ i ]! = null &&!this. tabla [ i ]. rtirado ) n++; Objct itns [ ] = nw Objct[n ] ; n = 0; for ( int i = 0; i < this.m; i++) if ( this. tabla [ i ]! = null &&!this. tabla [ i ]. rtirado ) itns [n++] = this. tabla [ i ]. itm; rturn itns ;

30 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Trcira tapa da comprssão privat void trciraetapa ( int maxcompcod) throws Excption { ExtraiPalavra palavras = nw ExtraiPalavra (nomarqdlim, nomarqtxt); String palavra = null ; whil ( ( palavra = palavras.proximapalavra())! = null ) { / / O primiro spaço dpois da palavra não é codificado if ( palavra.quals ( " " ) ) continu; ItmVoc itmvoc = (ItmVoc) this. vocabulario.psquisa ( palavra ); int ordm = itmvoc.rcupraordm ( ) ; Codigo cod = this. codifica (ordm, maxcompcod); this.scrv (cod, maxcompcod); palavras.fchararquivos ( ) ; Método scrv O método scrv rcb o código su comprimnto c m um objto do tipo Codigo. O código é rprsntado por um intiro, o qu limita su comprimnto a, no máximo, byts m um compilador qu usa byts para rprsntar intiros. Primiramnt, o método scrv xtrai o primiro byt, caso o código d Huffman utilizado sja o d marcação (basnum = 8), coloca a marcação no oitavo bit, fazndo uma opração or do byt com a constant 8. Ess byt é ntão colocado na primira posição do vtor saida. No anl whil, caso o comprimnto c do código sja maior do qu um, os dmais byts são xtraídos armaznados m saida[i], m qu i c. Por fim, o vtor d byts saida é gravado m disco no anl for. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Implmntação do Método scrv privat void scrv (Codigo cod, int maxcompcod) throws Excption { int saida [ ] = nw int [maxcompcod + ]; / / Ignora a posição 0 int logbas = ( int )(Math. log(this.basnum)/math. log ()); int mask = ( int )Math.pow (, logbas) ; int i = ; int ctmp = cod.c; saida[ i ] = cod.codigo >> (logbas (cod.c )); if (logbas == 7) saida[ i ] = saida[ i ] 8; / / Marcação i ++; cod.c ; whil (cod.c > 0) { saida[ i ] = (cod.codigo >> (logbas (cod.c ))) & mask; i ++; cod.c ; for ( i = ; i <= ctmp; i ++) this.arqcomp. writbyt ( saida[ i ] ) ; Dscrição do Código para Fazr a Dscomprssão O primiro passo é rcuprar o modlo usado na comprssão. Para isso, lê o alfabto, o vtor bas, o vtor offst o vtor vocabulario. Em sguida, inicia a dcodificação, tomando o cuidado d adicionar um spaço m branco ntr dois símbolos qu sjam palavras. O procsso d dcodificação trmina quando o arquivo comprimido é totalmnt prcorrido.

31 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Código para Fazr a Dscomprssão Métodos auxiliars da dscomprssão public void dscomprssao ( String nomarqtxt, this.nomarqtxt = nomarqtxt; String nomarqcomp) throws Excption { this.arqcomp = nw RandomAccssFil (nomarqcomp, "rws" ); BuffrdRadr arqdlim = nw BuffrdRadr ( nw FilRadr ( this.nomarqdlim) ) ; BuffrdWritr arqtxt = nw BuffrdWritr ( nw FilWritr ( this.nomarqtxt) ) ; String dlim = arqdlim.radlin() + " \ r \n" ; int maxcompcod = this. lvtors ( ) ; String vocabulario [ ] = this. lvocabulario ( ) ; int ind = 0; String palavraant = " " ; whil ( ( ind = this. dcodifica (maxcompcod)) >= 0) { if (! Dlimitador ( dlim, palavraant.charat(0)) &&! Dlimitador ( dlim, vocabulario [ ind ]. charat(0))) arqtxt. writ ( " " ); arqtxt. writ ( vocabulario [ ind ] ) ; palavraant = vocabulario [ ind ] ; arqtxt.clos ( ) ; OBS: Obsrv qu na dscomprssão, o vocabulário é rprsntado por um vtor d símbolos do tipo String. privat int lvtors ( ) throws Excption { int maxcompcod = this.arqcomp. radint ( ) ; this. offst = nw int [maxcompcod + ]; / / Ignora a posição 0 this.bas = nw int [maxcompcod + ]; / / Ignora a posição 0 for ( int i = ; i <= maxcompcod; i ++) { this.bas[ i ] = this.arqcomp. radint ( ) ; this. offst [ i ] = this.arqcomp. radint ( ) ; rturn maxcompcod; privat String [ ] lvocabulario ( ) throws Excption{ int n = this.arqcomp. radint ( ) ; String vocabulario [ ] = nw String [n+]; / / Ignora a posição 0 for ( int i = ; i <= n; i ++) { vocabulario [ i ] = " " ; char ch; whil ( (ch = this.arqcomp.radchar ( ) )! = \0 ) { vocabulario [ i ] += ch; rturn vocabulario ; privat boolan Dlimitador ( String dlim, char ch) { rturn ( dlim.indxof (ch) >= 0); Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8.. Rsultados Exprimntais Mostram qu não xist grand dgradação na razão d comprssão na utilização d byts m vz d bits na codificação das palavras d um vocabulário. Por outro lado, tanto a dscomprssão quanto a psquisa são muito mais rápidas com uma codificação d Huffman usando byts do qu uma codificação d Huffman usando bits, isso porqu dslocamntos d bits opraçõs usando máscaras não são ncssárias. Os xprimntos foram ralizados m uma máquina PC Pntium d 00 MHz com 8 mgabyts d RAM. Rsultados Exprimntais - Comparação das técnicas d comprssão sobr o arquivo WSJ Dados sobr a colção usada nos xprimntos: Txto Vocabulário Vocab./Txto Tam (byts) #Palavras Tam (byts) #Palavras Tamanho #Palavras ,59% 0,8% Método Razão d Tmpo (min) d Tmpo (min) d Comprssão Comprssão Dscomprssão Huffman binário 7, 8,77,08 Huffman plno 0,60 8,67,95 Huffman com marcação,70 8,90,0 Gzip 7,5 5,,68 Comprss,9 7,60 6,78

32 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8..5 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Psquisa m Txto Comprimido Uma das propridads mais atrants do método d Huffman usando byts m vz d bits é qu o txto comprimido pod sr psquisado xatamnt como qualqur txto não comprimido. Basta comprimir o padrão ralizar uma psquisa dirtamnt no arquivo comprimido. Isso é possívl porqu o código d Huffman usa byts m vz d bits; d outra manira, o método sria complicado ou msmo impossívl d sr implmntado. Casamnto Exato Algoritmo: Buscar a palavra no vocabulário, podndo usar busca binária nsta fas: S a palavra for localizada no vocabulário, ntão o código d Huffman com marcação é obtido. Snão a palavra não xist no txto comprimido. A sguir, o código é psquisado no txto comprimido usando qualqur algoritmo para casamnto xato d padrão. Para psquisar um padrão contndo mais d uma palavra, o primiro passo é vrificar a xistência d cada palavra do padrão no vocabulário obtr o su código: S qualqur das palavras do padrão não xistir no vocabulário, ntão o padrão não xistirá no txto comprimido. Snão basta coltar todos os códigos obtidos ralizar a psquisa no txto comprimido. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Método para ralizar busca no arquivo comprimido Método para atribuir o código ao padrão public void busca ( String nomarqcomp) throws Excption { BuffrdRadr in = nw BuffrdRadr ( nw InputStramRadr (Systm. in ) ) ; this.arqcomp = nw RandomAccssFil (nomarqcomp, "rws" ); int maxcompcod = this. lvtors ( ) ; String vocabulario [ ] = this. lvocabulario ( ) ; int codigo ; String T = " " ; String P = " " ; whil ( ( codigo = this.arqcomp.rad ()) >= 0) T += (char)codigo; whil ( tru ) { Systm. out. print ( "Padrao (ou s para sair ): " ) ; P = in.radlin ( ) ; if (P.quals ( "s" ) ) brak; int ord = ; for ( ord = ; ord < vocabulario. lngth ; ord++) if ( vocabulario [ord ]. quals (P) ) brak; if ( ord == vocabulario. lngth ) { Systm. out. println ( "Padrao: " + P + " nao ncontrado" ) ; continu; Codigo cod = this. codifica ( ord, maxcompcod); String Padrao = this. atribui (cod); CasamntoExato.bmh (T, T. lngth ( ), Padrao, Padrao. lngth ( ) ) ; privat String atribui (Codigo cod) { String P = " " ; P += (char)((cod.codigo >> (7 (cod.c ))) 8); cod.c ; whil (cod.c > 0) { P += (char)((cod.codigo >> (7 (cod.c ))) & 7); cod.c ; rturn P;

33 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Programa para tst dos algoritmos d comprssão, dscomprssão busca xata m txto comprimido Programa para tst dos algoritmos d comprssão, dscomprssão busca xata m txto comprimido packag cap8; import java. io. ; public class Huffman { privat static BuffrdRadr in = nw BuffrdRadr ( nw InputStramRadr (Systm. in ) ) ; privat static final int basnum = 8; privat static final int m = 00; privat static final int maxtampalavra = 5; privat static void imprim ( String msg) { Systm. out. print (msg); public static void main ( String [ ] args) throws Excption { imprim ( "Arquivo com os dlimitadors m uma linha : " ); String nomarqdlim = in.radlin ( ) ; String opcao = " " ; do { imprim ( " \n" ); imprim ( " Opcos \n" ); imprim ( " \n" ); imprim ( " (c) Comprssao \n" ); imprim ( " (d) Dscomprssao \n" ); imprim ( " (p) Psquisa no txto comprimido \n" ); imprim ( " ( f ) Trmina \n" ); imprim ( " \n" ); imprim ( " Opcao: " ) ; opcao = in.radlin ( ) ; if (opcao.tolowrcas( ). quals ( "c" ) ) { imprim ( "Arquivo txto a sr comprimido: " ); String nomarqtxt = in.radlin ( ) ; imprim ( "Arquivo comprimido a sr grado: " ); String nomarqcomp = in.radlin ( ) ; HuffmanByt huff = nw HuffmanByt (nomarqdlim, basnum, m, maxtampalavra); huff.comprssao (nomarqtxt, nomarqcomp); ls if (opcao.tolowrcas( ). quals ( "d" ) ) { imprim ( "Arquivo comprimido a sr dscomprimido: " ); String nomarqcomp = in.radlin ( ) ; imprim ( "Arquivo txto a sr grado: " ); String nomarqtxt = in.radlin ( ) ; HuffmanByt huff = nw HuffmanByt (nomarqdlim, basnum, m, maxtampalavra); huff.dscomprssao (nomarqtxt, nomarqcomp); ls if (opcao.tolowrcas( ). quals ( "p" ) ) { imprim ( "Arquivo comprimido para sr psquisado: " ); String nomarqcomp = in.radlin ( ) ; HuffmanByt huff = nw HuffmanByt ( null, basnum, m, maxtampalavra); huff.busca (nomarqcomp); whil (!opcao.tolowrcas( ). quals ( " f " ) ) ; Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8..5 Casamnto Aproximado Algoritmo: Psquisar o padrão no vocabulário. Nst caso, podmos tr: Casamnto xato, o qual pod sr uma psquisa binária no vocabulário, uma vz qu a palavra tnha sido ncontrada a folha corrspondnt na árvor d Huffman é marcada. Casamnto aproximado, o qual pod sr ralizado por mio d psquisa sqüncial no vocabulário, usando o algoritmo Shift-And. Nst caso, várias palavras do vocabulário podm sr ncontradas a folha corrspondnt a cada uma na árvor d Huffman é marcada. Casamnto Aproximado Algoritmo (Continuação): A sguir, o arquivo comprimido é lido byt a byt, ao msmo tmpo qu a árvor d dcodificação d Huffman é prcorrida sincronizadamnt. Ao atingir uma folha da árvor: s la stivr marcada, ntão xist casamnto com a palavra do padrão. Sja uma folha marcada ou não, o caminhamnto na árvor volta à raiz ao msmo tmpo qu a litura do txto comprimido continua.

34 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8..5 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8..5 Esquma gral d psquisa para a palavra uma prmitindo rro ama puma uma umas Casamnto Aproximado Usando uma Fras como Padrão Fras: sqüência d padrõs (palavras), m qu cada padrão pod sr dsd uma palavra simpls até uma xprssão rgular complxa prmitindo rros. Pré-Procssamnto: S uma fras tm j palavras, ntão uma máscara d j bits é colocada junto a cada palavra do vocabulário (folha da árvor d Huffman). Para uma palavra x da fras, o i-ésimo bit da máscara é fito igual a s x é a i-ésima palavra da fras. Assim, cada palavra i da fras é psquisada no vocabulário a i-ésima posição da máscara é marcada quando a palavra é ncontrada no vocabulário. Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8..5 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Casamnto Aproximado Usando uma Fras como Padrão Litura do Txto Comprimido: O stado da psquisa é controlado por um autômato finito não-dtrminista d j + stados. O autômato prmit movr do stado i para o stado i + smpr qu a i-ésima palavra da fras é rconhcida. O stado zro stá smpr ativo uma ocorrência é rlatada quando o stado j é ativado. Os byts do txto comprimido são lidos a árvor d Huffman é prcorrida como ants. Cada vz qu uma folha da árvor é atingida, sua máscara d bits é nviada para o autômato. Um stado ativo i irá ativar o stado i apnas s o i-ésimo bit da máscara stivr ativo. Consqüntmnt, o autômato raliza uma transição para cada palavra do txto. Esquma gral d psquisa para a fras uma ro* rosa rosa roupa azul uma rosas 0 XXX XX XX O autômato pod sr implmntado ficintmnt por mio do algoritmo Shift-And Sparadors podm sr ignorados na psquisa d frass XX Da msma manira, os artigos, prposiçõs tc., também podm sr ignorados s for convnint. Nst caso, basta ignorar as folhas corrspondnts na árvor d Huffman quando a psquisa chga a las. É raro ncontrar sta possibilidad m sistmas d psquisa on-lin.

35 Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção Tmpos d psquisa (m sgundos) para o arquivo WSJ, com intrvalo d confiança d 99% Algoritmo k = 0 k = k = k = Agrp,8 ± 0,8 7,9 ± 0, 6, ± 0, 7,6 ± 0,6 Psquisa dirta, ± 0,8 5,0 ± 0, 7,0 ± 0,7,7 ±, Psquisa com autômato, ± 0,09, ± 0,,7 ± 0, 5,0 ± 0,9

Processamento de Cadeias de Caracteres

Processamento de Cadeias de Caracteres Projto d Algoritmos Cap.8 Procssamnto d Cadias d Caractrs Sção 8. Dfinição Motivação Procssamnto d Cadias d Caractrs Última altração: d Maio d 00 Cadia d caractrs: sqüência d lmntos dnominados caractrs.

Leia mais

Representação de Números no Computador e Erros

Representação de Números no Computador e Erros Rprsntação d Númros no Computador Erros Anális Numérica Patrícia Ribiro Artur igul Cruz Escola Suprior d Tcnologia Instituto Politécnico d Stúbal 2015/2016 1 1 vrsão 23 d Fvriro d 2017 Contúdo 1 Introdução...................................

Leia mais

Escola Politécnica da Universidade de São Paulo. Departamento de Engenharia de Estruturas e Fundações

Escola Politécnica da Universidade de São Paulo. Departamento de Engenharia de Estruturas e Fundações Escola Politécnica da Univrsidad d São Paulo Dpartamnto d Engnharia d Estruturas Fundaçõs Laboratório d Estruturas Matriais Estruturais Extnsomtria létrica III Notas d aula Dr. Pdro Afonso d Olivira Almida

Leia mais

Hewlett-Packard MATRIZES. Aulas 01 a 05. Elson Rodrigues, Gabriel Carvalho e Paulo Luiz

Hewlett-Packard MATRIZES. Aulas 01 a 05. Elson Rodrigues, Gabriel Carvalho e Paulo Luiz Hwltt-Packard MTRIZES ulas 0 a 05 Elson Rodrigus, Gabril Carvalho Paulo Luiz Sumário MTRIZES NOÇÃO DE MTRIZ REPRESENTÇÃO DE UM MTRIZ E SEUS ELEMENTOS EXERCÍCIO FUNDMENTL MTRIZES ESPECIIS IGULDDE ENTRE

Leia mais

/ :;7 1 6 < =>6? < 7 A 7 B 5 = CED? = DE:F= 6 < 5 G? DIHJ? KLD M 7FD? :>? A 6? D P

/ :;7 1 6 < =>6? < 7 A 7 B 5 = CED? = DE:F= 6 < 5 G? DIHJ? KLD M 7FD? :>? A 6? D P 26 a Aula 20065 AMIV 26 Exponncial d matrizs smlhants Proposição 26 S A SJS ntão Dmonstração Tmos A SJS A % SJS SJS SJ % S ond A, S J são matrizs n n ", (com dt S 0), # S $ S, dond ; A & SJ % S SJS SJ

Leia mais

Hewlett-Packard MATRIZES. Aulas 01 a 06. Elson Rodrigues, Gabriel Carvalho e Paulo Luiz

Hewlett-Packard MATRIZES. Aulas 01 a 06. Elson Rodrigues, Gabriel Carvalho e Paulo Luiz Hwltt-Packard MTRIZES ulas 0 a 06 Elson Rodrigus, Gabril Carvalho Paulo Luiz no 06 Sumário MTRIZES NOÇÃO DE MTRIZ REPRESENTÇÃO DE UM MTRIZ E SEUS ELEMENTOS EXERCÍCIO FUNDMENTL MTRIZES ESPECIIS IGULDDE

Leia mais

2 x. ydydx. dydx 1)INTEGRAIS DUPLAS: RESUMO. , sendo R a região que. Exemplo 5. Calcule integral dupla. xda, no retângulo

2 x. ydydx. dydx 1)INTEGRAIS DUPLAS: RESUMO. , sendo R a região que. Exemplo 5. Calcule integral dupla. xda, no retângulo Intgração Múltipla Prof. M.Sc. Armando Paulo da Silva UTFP Campus Cornélio Procópio )INTEGAIS DUPLAS: ESUMO Emplo Emplo Calcul 6 Calcul 6 dd dd O fato das intgrais rsolvidas nos mplos srm iguais Não é

Leia mais

MESTRADO PROFISSIONAL EM ECONOMIA DO SETOR PÚBLICO

MESTRADO PROFISSIONAL EM ECONOMIA DO SETOR PÚBLICO II/05 UNIVERSIDADE DE BRASÍLIA DEPARTAMENTO DE ECONOMIA 0//5 MESTRADO PROFISSIONAL EM ECONOMIA DO SETOR PÚBLICO ECONOMIA DA INFORMAÇÃO E DOS INCENTIVOS APLICADA À ECONOMIA DO SETOR PÚBLICO Prof. Maurício

Leia mais

MESTRADO PROFISSIONAL EM ECONOMIA DO SETOR PÚBLICO

MESTRADO PROFISSIONAL EM ECONOMIA DO SETOR PÚBLICO II/05 UNIVERSIDADE DE BRASÍLIA DEPARTAMENTO DE ECONOMIA 0//5 MESTRADO PROFISSIONAL EM ECONOMIA DO SETOR PÚBLICO ECONOMIA DA INFORMAÇÃO E DOS INCENTIVOS APLICADA À ECONOMIA DO SETOR PÚBLICO Prof. Maurício

Leia mais

3. Geometria Analítica Plana

3. Geometria Analítica Plana MINISTÉRIO DA EDUCAÇÃO UNIVERSIDADE FEDERAL DE PELOTAS DEPARTAMENTO DE MATEMÁTICA E ESTATÍSITICA APOSTILA DE GEOMETRIA ANALÍTICA PLANA PROF VINICIUS 3 Gomtria Analítica Plana 31 Vtors no plano Intuitivamnt,

Leia mais

v 4 v 6 v 5 b) Como são os corte de arestas de uma árvore?

v 4 v 6 v 5 b) Como são os corte de arestas de uma árvore? 12 - Conjuntos d Cort o studarmos árors gradoras, nós stáamos intrssados m um tipo spcial d subgrafo d um grafo conxo: um subgrafo qu mantiss todos os értics do grafo intrligados. Nst tópico, nós stamos

Leia mais

Estrutura de dados 1. Processamento de Cadeias de Caracteres

Estrutura de dados 1. Processamento de Cadeias de Caracteres Estrutura de dados 1 Processamento de Cadeias de Caracteres Casamento de Cadeias Casamento de Cadeias Casamento Exato Casamento Aproximado Compressão Por Que Usar Compressão Compressão de Textos em Linguagem

Leia mais

Cálculo de Autovalores, Autovetores e Autoespaços Seja o operador linear tal que. Por definição,, com e. Considere o operador identidade tal que.

Cálculo de Autovalores, Autovetores e Autoespaços Seja o operador linear tal que. Por definição,, com e. Considere o operador identidade tal que. AUTOVALORES E AUTOVETORES Dfiniçõs Sja um oprador linar Um vtor, é dito autovtor, vtor próprio ou vtor caractrístico do oprador T, s xistir tal qu O scalar é dnominado autovalor, valor próprio ou valor

Leia mais

Enunciados equivalentes

Enunciados equivalentes Lógica para Ciência da Computação I Lógica Matmática Txto 6 Enunciados quivalnts Sumário 1 Equivalência d nunciados 2 1.1 Obsrvaçõs................................ 5 1.2 Exrcícios rsolvidos...........................

Leia mais

Razão e Proporção. Noção de Razão. 3 3 lê-se: três quartos lê-se: três para quatro ou três está para quatro

Razão e Proporção. Noção de Razão. 3 3 lê-se: três quartos lê-se: três para quatro ou três está para quatro Razão Proporção Noção d Razão Suponha qu o profssor d Educação Física d su colégio tnha organizado um tornio d basqutbol com quatro quips formadas plos alunos da ª séri. Admita qu o su tim foi o vncdor

Leia mais

Solução da equação de Poisson 1D com coordenada generalizada

Solução da equação de Poisson 1D com coordenada generalizada Solução da quação d Poisson 1D com coordnada gnralizada Guilhrm Brtoldo 8 d Agosto d 2012 1 Introdução Ao s rsolvr a quação d Poisson unidimnsional d 2 T = fx), 0 x 1, 1) dx2 sujita às condiçõs d contorno

Leia mais

Exame de Matemática Página 1 de 6. obtém-se: 2 C.

Exame de Matemática Página 1 de 6. obtém-se: 2 C. Eam d Matmática -7 Página d 6. Simplificando a prssão 9 ( ) 6 obtém-s: 6.. O raio r = m d uma circunfrência foi aumntado m 5%. Qual foi o aumnto prcntual da ára da sgunda circunfrência m comparação com

Leia mais

Material Teórico - Módulo Equações e Sistemas de Equações Fracionárias. Sistemas de Equações Fracionárias. Oitavo Ano

Material Teórico - Módulo Equações e Sistemas de Equações Fracionárias. Sistemas de Equações Fracionárias. Oitavo Ano Matrial Tórico - Módulo Equaçõs Sistmas d Equaçõs Fracionárias Sistmas d Equaçõs Fracionárias Oitavo Ano Autor: Prof Ulisss Lima Parnt Rvisor: Prof Antonio Caminha M Nto Sistmas d quaçõs fracionárias Nssa

Leia mais

Processamento de Cadeias de Caracteres

Processamento de Cadeias de Caracteres Processamento de Cadeias de Caracteres Última alteração: 21 de Setembro de 2004 Transparências elaboradas por Fabiano Cupertino Botelho, Charles Ornelas Almeida e Nivio Ziviani Projeto de Algoritmos Cap.8

Leia mais

Preenchimento de Áreas. Preenchimento de Áreas Algoritmo Scanline. Preenchimento de Áreas. Preenchimento. Teste dentro-fora. Preenchimento.

Preenchimento de Áreas. Preenchimento de Áreas Algoritmo Scanline. Preenchimento de Áreas. Preenchimento. Teste dentro-fora. Preenchimento. Prnchimnto d Áras Algoritmo Scanlin Fonts: Harn & Bakr, Cap. - Apostila CG, Cap. Prnchimnto d Áras Problma d convrsão matricial d áras gométricas Aproimar uma primitiva gométrica por pils Primitivas D

Leia mais

DICAS PARA CÁLCULOS MAIS RÁPIDOS ARTIGO 03

DICAS PARA CÁLCULOS MAIS RÁPIDOS ARTIGO 03 DICAS PARA CÁLCULOS MAIS RÁPIDOS ARTIGO 0 Em algum momnto da sua vida você dcorou a tabuada (ou boa part dla). Como você mmorizou qu x 6 = 0, não prcisa fazr st cálculo todas as vzs qu s dpara com l. Além

Leia mais

PERFIL DE SAÍDA DOS ESTUDANTES DA 5ª SÉRIE DO ENSINO FUNDAMENTAL, COMPONENTE CURRICULAR MATEMÁTICA

PERFIL DE SAÍDA DOS ESTUDANTES DA 5ª SÉRIE DO ENSINO FUNDAMENTAL, COMPONENTE CURRICULAR MATEMÁTICA PERFIL DE SAÍDA DOS ESTUDANTES DA 5ª SÉRIE DO ENSINO FUNDAMENTAL, COMPONENTE CURRICULAR MATEMÁTICA CONTEÚDOS EIXO TEMÁTICO COMPETÊNCIAS Sistma d Numração - Litura scrita sistma d numração indo-arábico

Leia mais

Compressão de Textos. Introdução. Introdução. Introdução. O volume de informação textual disponível on-line é imenso:

Compressão de Textos. Introdução. Introdução. Introdução. O volume de informação textual disponível on-line é imenso: Compressão de Textos Estrutura de Dados II Prof. Guilherme Tavares de Assis Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação DECOM O volume

Leia mais

Problemas Numéricos: 1) Desde que a taxa natural de desemprego é 0.06, π = π e 2 (u 0.06), então u 0.06 = 0.5(π e π), ou u =

Problemas Numéricos: 1) Desde que a taxa natural de desemprego é 0.06, π = π e 2 (u 0.06), então u 0.06 = 0.5(π e π), ou u = Capitulo 12 (ABD) Prguntas para rvisão: 5) Os formuladors d políticas dsjam mantr a inflação baixa porqu a inflação impõ psados custos sobr a conomia. Os custos da inflação antcipado inclum custos d mnu,

Leia mais

FUNÇÃO REAL DE UMA VARIÁVEL REAL

FUNÇÃO REAL DE UMA VARIÁVEL REAL Hwltt-Packard FUNÇÃO REAL DE UMA VARIÁVEL REAL Aulas 01 a 05 Elson Rodrigus, Gabril Carvalho Paulo Luiz Ano: 2016 Sumário INTRODUÇÃO AO PLANO CARTESIANO 2 PRODUTO CARTESIANO 2 Númro d lmntos d 2 Rprsntaçõs

Leia mais

ANÁLISE CUSTO - VOLUME - RESULTADOS

ANÁLISE CUSTO - VOLUME - RESULTADOS ANÁLISE CUSTO - VOLUME - RESULTADOS 1 Introdução ao tma Exist todo o intrss na abordagm dst tma, pois prmit a rsolução d um conjunto d situaçõs qu s aprsntam rgularmnt na vida das organizaçõs. Estas qustõs

Leia mais

λ, para x 0. Outras Distribuições de Probabilidade Contínuas

λ, para x 0. Outras Distribuições de Probabilidade Contínuas abilidad Estatística I Antonio Roqu Aula 3 Outras Distribuiçõs d abilidad Contínuas Vamos agora studar mais algumas distribuiçõs d probabilidads para variávis contínuas. Distribuição Eponncial Uma variávl

Leia mais

Hewlett-Packard MATRIZES. Aulas 01 a 06. Elson Rodrigues, Gabriel Carvalho e Paulo Luiz

Hewlett-Packard MATRIZES. Aulas 01 a 06. Elson Rodrigues, Gabriel Carvalho e Paulo Luiz Hwltt-Packard MATRIZES Aulas 0 a 06 Elson Rodrigus, Gabril Carvalho Paulo Luiz Sumário MATRIZES NOÇÃO DE MATRIZ REPRESENTAÇÃO DE UMA MATRIZ E SEUS ELEMENTOS EXERCÍCIO FUNDAMENTAL MATRIZES ESPECIAIS IGUALDADE

Leia mais

Laboratório de Física

Laboratório de Física Laboratório d Física Exprimnto 01: Associação d Rsistors Disciplina: Laboratório d Física Exprimntal II Profssor: Turma: Data: / /20 Alunos (noms compltos m ordm alfabética): 1: 2: 3: 4: 5: 2/15 01 Associação

Leia mais

P R O P O S T A D E R E S O L U Ç Ã O D O E X A M E T I P O 5

P R O P O S T A D E R E S O L U Ç Ã O D O E X A M E T I P O 5 P R O P O S T A D E R E S O L U Ç Ã O D O E X A M E T I P O 5 GRUPO I ITENS DE ESCOLHA MÚLTIPLA 1. Agrupando num bloco a Ana, a Bruna, o Carlos, a Diana o Eduardo, o bloco os rstants st amigos prmutam

Leia mais

Processamento de Cadeias de Caracteres

Processamento de Cadeias de Caracteres Processamento de Cadeias de Caracteres Última alteração: 31 de Outubro de 2010 Transparências elaboradas por Fabiano Cupertino Botelho, Charles Ornelas Almeida, Israel Guerra e Nivio Ziviani Projeto de

Leia mais

RI406 - Análise Macroeconômica

RI406 - Análise Macroeconômica Fdral Univrsity of Roraima, Brazil From th SlctdWorks of Elói Martins Snhoras Fall Novmbr 18, 2008 RI406 - Anális Macroconômica Eloi Martins Snhoras Availabl at: http://works.bprss.com/loi/54/ Anális Macroconômica

Leia mais

FUNÇÕES DE UMA VARIÁVEL COMPLEXA

FUNÇÕES DE UMA VARIÁVEL COMPLEXA FUNÇÕES DE UMA VARIÁVEL COMPLEXA Ettor A. d Barros 1. INTRODUÇÃO Sja s um númro complxo qualqur prtncnt a um conjunto S d númros complxos. Dizmos qu s é uma variávl complxa. S, para cada valor d s, o valor

Leia mais

Curso de Engenharia Mecânica Disciplina: Física 2 Nota: Rubrica. Coordenador Professor: Rudson R Alves Aluno:

Curso de Engenharia Mecânica Disciplina: Física 2 Nota: Rubrica. Coordenador Professor: Rudson R Alves Aluno: Curso d Engnharia Mcânica Disciplina: Física 2 Nota: Rubrica Coordnador Profssor: Rudson R Alvs Aluno: Turma: EA3N Smstr: 1 sm/2017 Data: 20/04/2017 Avaliação: 1 a Prova Valor: 10,0 p tos INSTRUÇÕES DA

Leia mais

Algumas distribuições de variáveis aleatórias discretas importantes:

Algumas distribuições de variáveis aleatórias discretas importantes: Algumas distribuiçõs d variávis alatórias discrtas importants: Distribuição Uniform Discrta Enquadram-s aqui as distribuiçõs m qu os possívis valors da variávl alatória tnham todos a msma probabilidad

Leia mais

INTRODUÇÃO À ESTATÍSTICA

INTRODUÇÃO À ESTATÍSTICA INTRODUÇÃO À ESTATÍSTICA ERRATA (capítulos 1 a 6 CAP 1 INTRODUÇÃO. DADOS ESTATÍSTICOS Bnto Murtira Carlos Silva Ribiro João Andrad Silva Carlos Pimnta Pág. 10 O xmplo 1.10 trmina a sguir ao quadro 1.7,

Leia mais

Amplificador diferencial com transistor bipolar

Amplificador diferencial com transistor bipolar Amplificador difrncial com transistor bipolar - ntrodução O amplificador difrncial é um bloco funcional largamnt mprgado m circuitos analógicos intgrados, bm como nos circuitos digitais da família ECL.

Leia mais

5.10 EXERCÍCIO pg. 215

5.10 EXERCÍCIO pg. 215 EXERCÍCIO pg Em cada um dos sguints casos, vriicar s o Torma do Valor Médio s aplica Em caso airmativo, achar um númro c m (a, b, tal qu (c ( a - ( a b - a a ( ; a,b A unção ( é contínua m [,] A unção

Leia mais

UNIVERSIDADE DE SÃO PAULO Faculdade de Economia, Administração e Contabilidade de Ribeirão Preto Departamento de Economia

UNIVERSIDADE DE SÃO PAULO Faculdade de Economia, Administração e Contabilidade de Ribeirão Preto Departamento de Economia UNIVERSIDADE DE SÃO PAULO Faculdad d Economia, Administração Contabilidad d Ribirão Prto Dpartamnto d Economia Nom: Númro: REC200 MICROECONOMIA II PRIMEIRA PROVA (20) () Para cada uma das funçõs d produção

Leia mais

Campo elétrico. Antes de estudar o capítulo PARTE I

Campo elétrico. Antes de estudar o capítulo PARTE I PART I Unidad A 2 Capítulo Sçõs: 21 Concito d 22 d cargas puntiforms 2 uniform Ants d studar o capítulo Vja nsta tabla os tmas principais do capítulo marqu um X na coluna qu mlhor traduz o qu você pnsa

Leia mais

Hewlett-Packard CONJUNTOS NUMÉRICOS. Aulas 01 a 06. Elson Rodrigues, Gabriel Carvalho e Paulo Luiz Ramos

Hewlett-Packard CONJUNTOS NUMÉRICOS. Aulas 01 a 06. Elson Rodrigues, Gabriel Carvalho e Paulo Luiz Ramos Hwltt-Packard CONJUNTOS NUMÉRICOS Aulas 0 a 06 Elson Rodrigus, Gabril Carvalho Paulo Luiz Ramos Ano: 206 Sumário CONJUNTOS NUMÉRICOS 2 Conjunto dos númros Naturais 2 Conjunto dos númros Intiros 2 Conjunto

Leia mais

EXPRESSÕES LÓGICAS. 9.1 Lógica proposicional AULA 9

EXPRESSÕES LÓGICAS. 9.1 Lógica proposicional AULA 9 AULA 9 EXPRESSÕES LÓGICAS 9.1 Lógica proposicional Lógica é o studo do raciocínio 1. Em particular, utilizamos lógica quando dsjamos dtrminar s um dado raciocínio stá corrto. Nsta disciplina, introduzimos

Leia mais

Estatística II. Aula 8. Prof. Patricia Maria Bortolon, D. Sc.

Estatística II. Aula 8. Prof. Patricia Maria Bortolon, D. Sc. Estatística II Aula 8 Pro. Patricia Maria Bortolon, D. Sc. Tsts Qui Quadrado Objtivos da Aula 8 Nsta aula, você aprndrá: Como quando utilizar o tst qui-quadrado para tablas d contingência Como utilizar

Leia mais

Critérios de falha PROF. ALEXANDRE A. CURY DEPARTAMENTO DE MECÂNICA APLICADA E COMPUTACIONAL

Critérios de falha PROF. ALEXANDRE A. CURY DEPARTAMENTO DE MECÂNICA APLICADA E COMPUTACIONAL PROF. ALEXANDRE A. CURY DEPARTAMENTO DE MECÂNICA APLICADA E COMPUTACIONAL A avaliação das tnsõs dformaçõs smpr é fita m função d crtas propridads do matrial. Entrtanto, não basta apnas calcular ssas grandzas.

Leia mais

Em cada ciclo, o sistema retorna ao estado inicial: U = 0. Então, quantidade de energia W, cedida, por trabalho, à vizinhança, pode ser escrita:

Em cada ciclo, o sistema retorna ao estado inicial: U = 0. Então, quantidade de energia W, cedida, por trabalho, à vizinhança, pode ser escrita: Máquinas Térmicas Para qu um dado sistma raliz um procsso cíclico no qual rtira crta quantidad d nrgia, por calor, d um rsrvatório térmico cd, por trabalho, outra quantidad d nrgia à vizinhança, são ncssários

Leia mais

Aula Expressão do produto misto em coordenadas

Aula Expressão do produto misto em coordenadas Aula 15 Nsta aula vamos xprssar o produto misto m trmos d coordnadas, analisar as propridads dcorrnts dssa xprssão fazr algumas aplicaçõs intrssants dos produtos vtorial misto. 1. Exprssão do produto misto

Leia mais

COLÉGIO OBJETIVO JÚNIOR

COLÉGIO OBJETIVO JÚNIOR COLÉGIO OBJETIVO JÚNIOR NOME: N. o : DATA: / /01 FOLHETO DE MATEMÁTICA (V.C. E R.V.) 6. o ANO Est folhto é um rotiro d studo para você rcuprar o contúdo trabalhado m 01. Como l vai srvir d bas para você

Leia mais

Processamento de Cadeias de Caracteres

Processamento de Cadeias de Caracteres Projeto de Algoritmos Cap.8 Processamento de Cadeias de Caracteres Seção 8. 3 Notação Texto: arranjo T[..n] de tamanho n; Padrão: arranjo P[..m] de tamanho m n. Os elementos de P e T são escolhidos de

Leia mais

Adriano Pedreira Cattai

Adriano Pedreira Cattai Adriano Pdrira Cattai apcattai@ahoocombr Univrsidad Fdral da Bahia UFBA, MAT A01, 006 3 Suprfíci Cilíndrica 31 Introdução Dfinição d Suprfíci Podmos obtr suprfícis não somnt por mio d uma quação do tipo

Leia mais

PLANO DE AMOSTRAGEM PARA TESTES POR ATRIBUTOS

PLANO DE AMOSTRAGEM PARA TESTES POR ATRIBUTOS PLANO DE AMOSTRAGEM PARA TESTES POR ATRIBUTOS por Jonas Libl Os tsts por atributos tm o objtivo d stimar para o univrso proporçõs d incidências obsrvadas m amostras, a fim d possibilitar a formação d opinião

Leia mais

Índice. Introdução. Pré-requisitos. Requisitos. Dispositivos suportados

Índice. Introdução. Pré-requisitos. Requisitos. Dispositivos suportados Índic Introdução Pré-rquisitos Rquisitos Dispositivos suportados Listas d vrificação do rgistro Componnts Utilizados Passos d configuração Vrificação Cisco rlacionado apoia discussõs da comunidad Introdução

Leia mais