Estrtrs de Ddos Grfos II: Estrtrs de Ddos Prof. Ricrdo J. G. B. Cmpello Prte deste mteril é sedo em dptções e extensões de slides disponíeis em http://.dtstrctres.net (Goodrich & Tmssi). Orgnizção TAD Grfo Estrtrs de Ddos pr Grfos List de Arests List de Adjcêncis Mtriz de Adjcêncis Análise Assintótic Comprti Desempenhos ds Principis Operções do TAD Exemplo de Implementção Simples Código C de m ED Alternti
TAD Grfo Ddos: értices e rests relções de incidênci elementos rmzendos Operções (Geris): endvertices(g, e): retorn os dois értices finis d rest e (p. ex. rrnjo c/ elementos). opposite(g,, e): retorn o értice oposto n rest e. readjcent(g,, ): erddeiro se e somente se os értices e forem djcentes. replcevertex(g,, x): sstiti o elemento do értice por x. replceedge(g, e, x): sstiti o elemento d rest e por x. Operções (de Atlizção): insertvertex(g, o): insere m noo értice isoldo, rmzenndo nele o elemento o, e retorn m referênci. insertedge(g,,, o): insere m rest (,), rmzenndo nel o elemento o, e retorn m referênci. remoevertex(g, ): remoe o értice (e ss rests incidentes) e retorn o elemento rmzendo nele. remoeedge(g, e): remoe rest e, retornndo o elemento rmzendo. Operções (Otrs): incidentedges(g, ): retorn list de refs. pr s rests incidentes em. ertices(g): retorn list de refs. pr os értices do grfo G.... Not: Métodos Específicos podem ser Adiciondos pr Grfos Direciondos Estrtr de Ddos List de Arests c d z z n értices c d m rests
List de Arests c d z z c d Principis Desntgens: Verificr s rests incidentes em m ddo értice demnd percorrer tod list de rests Operção incidentedges(g, ) do TAD é O(m) O mesmo le pr checr se dois értices e são djcentes, em como pr remoer m ddo értice Operção readjcent(g,, ) do TAD é O(m) Operção remoevertex(g, ) do TAD é O(m) 5 Estrtr de Ddos - List de Adjcêncis A cd elemento d list de értices é diciondo m ponteiro pr m list de incidêncis: list de ponteiros pr ss rests incidentes. A cd elemento d list de rests são diciondos ponteiros pr s posições correspondentes ns lists de incidênci dos ses értices. 6
List de Adjcêncis A prtir de m értice, podemos cessr ss rests incidentes em tempo proporcionl o se número: incidentedges(g, ) do TAD é O(deg()) remoevertex(g, ) do TAD é O(deg()) Podemos erificr se dois értices e são djcentes percorrendo menor dentre s respectis lists xilires de incidênci: readjcent(g,, ) do TAD é O( min(deg(), deg()) ) 7 Estrtr de Ddos Mtriz de Adjcêncis A cd elemento d list de értices é diciond: Um che (índice) ssocid o értice. Acrescent-se ind m mtriz de djcêncis com: Nlo ns posições de értices não djcentes. Ponteiro pr o elemento correspondente d list de rests, ns posições de értices djcentes. 0 0 0 8
Desempenho Assintótico ds Principis Operções do TAD Grfo simples com n értices e m rests Notção Big O List de Arests List de Adjcêncis Mtriz de Adjcêncis Espço (memóri) n + m * n + m * n + m incidentedges(g, ) m deg() n readjcent(g,, ) m min(deg(), deg()) insertvertex(g, o) n * insertedge(g,,, o) remoevertex(g, ) m deg() n * remoeedge(g, e) 9 Implementção Simples: Estrtr Alternti (Skien & Reill, 00) Vértices rotldos: Ches (índices) são ssocids os értices z Arests sem elementos. Grfos estáticos, o: Inserções e remoções sem redimensionmento ds mtrizes e etores Mtrizes e etores sperdimensiondos pr: No. de értices (MAXV) Gr (MAXDEGREE) 0 0 edges 0 MAXDEGREE z ertices 0 degree MAXV 0 5
Estrtr Alternti (Skien & Reill, 00) Not: Como s rests não são representds explicitmente, ess estrtr não permite implementção ds operções endvertices, opposite e replceedge do TAD Grfo. Exercícios. Expliqe rzão de cd m ds complexiddes comptcionis d tel do slide 9, lém dqels qe form disctids.. N implementção simples de grfo em C disctid em l, não se incli n estrtr principl (strct grph) m etor ertices pr rmzenr os elementos dos értices. Modifiqe ess estrtr de tl form qe esse etor sej contempldo. Not: Considere qe os elementos nos értices são strings com no máx. 0 crcteres e qe értices inexistentes rmzenm nlo (\0).. Estde em (Skien & Reill, 00) s rotins em C ds operções sore grfos implementdos segndo estrtr lternti disctid em l: inserção e remoção de rests / értices. 6
Exercícios. Represente grficmente o grfo ixo em cd m ds três diferentes estrtrs de ddos clássics disctids em l: list de rests, list de djcêncis e mtriz de djcêncis B - A 0 D.9 E 0 C 5 5. Ignore os pesos ds rests e repit o exemplo nterior pr estrtr lternti tmém disctid. Nesse cso, represente o conteúdo d mtriz edges e dos etores degree e ertices. 6. Elore lgns diferentes grfos e repit os Exercícios e 5. Biliogrfi M. T. Goodrich nd R. Tmssi, Dt Strctres nd Algorithms in C++/J, John Wiley & Sons, 00/005. N. Ziini, Projeto de Algoritmos, Thomson,. Edição, 00. T. H. Cormen, C. E. Leiserson, nd R. L. Riest, Introdction to Algorithms, MIT Press, nd Edition, 00. S. Skien e M. Reill, Progrmming Chllenges: The Progrmming Contest Trining Mnl, Springer-Verlg, 00. 7