Você está na página 1de 9

Trabalho de Estrutura de Dados

Por Raquel Marcondes

Resumo 1.Intercalao Polifsica A intercalao polifsica surgiu a partido dos Problemas com a intercalao balanceada de vrios caminhos pois: - Necessita de um grande nmero de fitas. - Faz vrias leituras e escritas entre as fitas envolvidas. -Para uma intercalao balanceada de f caminhos so necessrias 2f fitas. - Alternativamente, pode-se copiar o arquivo quase todo de uma nica fita de sada para f fitas de entrada. - Isso reduz o nmero de fitas para f + 1. - Porm, h um custo de uma cpia adicional do arquivo. Apresenta as seguintes caractersticas: -Os blocos ordenados so distribudos de forma desigual entre as fitas disponveis. - Uma fita deixada livre. - Em seguida, a intercalao de blocos ordenados executada at que uma das fitas esvazie. - Neste ponto, uma das fitas de sada troca de papel com a fita de entrada.

EX: Blocos de ordenao por meio de seleo

Assim pode-se notar a intercalao realizada em muitas fases. - As fases no envolvem todos os blocos. - Nenhuma cpia direta entre fitas realizada.

2. QuickSort Externo - Foi proposto por Monard em 1980. - Utiliza o paradigma de diviso e conquista. - O algoritmo ordena in situ um arquivo A = {R1, ..., Rn} de n registros. - Os registros esto armazenados consecutivamente em memria secundria de acesso randmico. - O algoritmo utiliza somente O(log n) unidades de memria interna e no necessria Seja Ri, 1 <= i <= n, o registro que se encontra na i-sima posio de A. Algoritmo: 1. Particionar A da seguinte forma: {R1, .., Ri} <= Ri+1 <= Ri+2 <= ... <= Rj-2 <= Rj-2 <= {Rj, ..., Rn} 2. chamar recursivamente o algoritmo em cada um dos subarquivos A1 = {R1, ..., Ri} e A2 = {Rj, ..., Rn}. Para o particionamento utilizada uma rea de armazenamento na memria interna. - Tamanho da rea: TamArea = j i 1, com TamArea >= 3. - Nas chamadas recusivas deve-se considerar que: - Primeiro deve ser ordenado o subarquivo de menor tamanho. - Condio para que, na mdia, O(log n) subarquivos tenham o processamento adiado. - Subarquivos vazios ou com um nico registro so ignorados. - Caso o arquivo de entrada A possua no mximo TamArea registros, ele ordenado em um nico passo.

Cdigo: void QuicksortExterno(FILE **ArqLi, FILE **ArqEi, FILE **ArqLEs, int Esq, int Dir) { int i, j; TipoArea Area; /* Area de armazenamento interna */ if (Dir Esq < 1) return; FAVazia(&Area); Particao(ArqLi, ArqEi, ArqLEs, Area, Esq, Dir, &i, &j); if (i Esq < Dir j) { /* ordene primeiro o subarquivo menor */ QuicksortExterno(ArqLi, ArqEi, ArqLEs, Esq, i); QuicksortExterno(ArqLi, ArqEi, ArqLEs, j, Dir); } else { QuicksortExterno(ArqLi, ArqEi, ArqLEs, j, Dir); QuicksortExterno(ArqLi, ArqEi, ArqLEs, Esq, i); } } void LeSup(FILE **ArqLEs, TipoRegistro *UltLido, int *Ls, short *OndeLer) { fseek(*ArqLEs, (*Ls 1) * sizeof(TipoRegistro), SEEK_SET); fread(UltLido, sizeof(TipoRegistro), 1, *ArqLEs); (*Ls)--; *OndeLer = FALSE; } void LeInf(FILE **ArqLi, TipoRegistro *UltLido, int *Li, short *OndeLer)

{ fread(UltLido, sizeof(TipoRegistro), 1, *ArqLi); (*Li)++; *OndeLer = TRUE; } void InserirArea(TipoArea *Area, TipoRegistro *UltLido, int *NRArea) { /* Insere UltLido de forma ordenada na Area */ InsereItem(*UltLido, Area); *NRArea = ObterNumCelOcupadas(Area); } void EscreveMax(FILE **ArqLEs, TipoRegistro R, int *Es) { fseek(*ArqLEs, (*Es 1) * sizeof(TipoRegistro), SEEK_SET); fwrite(&R, sizeof(TipoRegistro), 1, *ArqLEs); (*Es)--; } void EscreveMin(FILE **ArqEi, TipoRegistro R, int *Ei) { fwrite(&R, sizeof(TipoRegistro), 1, *ArqEi); (*Ei)++; } void RetiraMax(TipoArea *Area, TipoRegistro *R, int *NRArea) { RetiraUltimo(Area, R); *NRArea = ObterNumCelOcupadas(Area); } void RetiraMin(TipoArea *Area, TipoRegistro *R, int *NRArea) { RetiraPrimeiro(Area, R); *NRArea = ObterNumCelOcupadas(Area); } void Particao(FILE **ArqLi, FILE **ArqEi, FILE **ArqLEs, TipoArea Area, int Esq, int Dir, int *i, int *j) { int Ls = Dir, Es = Dir, Li = Esq, Ei = Esq, NRArea = 0, Linf = INT_MIN, Lsup = INT_MAX; short OndeLer = TRUE; TipoRegistro UltLido, R; fseek(*ArqLi, (Li 1)* sizeof(TipoRegistro), SEEK_SET); fseek(*ArqEi, (Li 1)* sizeof(TipoRegistro), SEEK_SET);

*i = Esq 1; *j = Dir + 1; while (Ls >= Li) { if (NRArea < TamArea 1) { if (OndeLer) LeSup(ArqLEs, &UltLido, &Ls, &OndeLer); else LeInf(ArqLi, &UltLido, &Li, &OndeLer); InserirArea(&Area, &UltLido, &NRArea); continue; }

3.Acesso indexado O mtodo de acesso seqencial indexado utiliza o princpio da pesquisaseqencial: a partir do primeiro, cada registro lido seqencialmente atencontrar uma chave maior ou igual a chave de pesquisa. Para aumentar aeficincia, evitando que todos os registros tenham que ser lidos seqencial-mente do disco, duas providncias so necessrias: (i) o arquivo deve mantidoordenado pelo campo chave do registro, (ii) um arquivo de ndices contendo pares de valores < x, p> deve ser criado, onde x representa uma chave e prepresenta o endereo da pgina na qual o primeiro registro contm a chavex.A Figura 5.4 mostra um exemplo da estrutura de um arquivo seqencialindexado para um conjunto de 15 registros. No exemplo, cada pgina temcapacidade para armazenar 4 registros do arquivo de dados e cada entrada dondice de pginas armazena a chave do primeiro registro de cada pgina e oendereo da pgina no disco. Por exemplo, o ndice relativo primeirapgina informa que ela contm registros com chaves entre 3 e 14 exclusive, ondice relativo a segunda pgina informa que ela contm registros com chavesentre 14 e 25 exclusive, e assim por diante Em um disco magntico vrias superfcies de gravao so utilizadas,conforme ilustra a Figura 5.5. 0 disco magntico dividido em crculosconcntricos chamados trilhas. Quando o mecanismo de acesso est posi-cionado em uma determinada trilha, todas as trilhas que esto verticalmentealinhadas e possuem mesmo dimetro formam um cilindro. Neste caso, umareferncia a um registro que se encontre em uma pgina de qualquer trilha docilindro no requer o deslocamento do mecanismo de acesso e o nico temponecessrio o de latncia rotacional, que o tempo necessrio para que oincio do bloco que contenha o registro a ser lido passe pela cabea de lei-tura/gravao. A necessidade de deslocamento do mecanismo de acesso deuma trilha para outra

responsvel pela parte maior do custo para acessar osdados e chamado de tempo de busca (seek time). Desta forma, o mtodo de acesso seqencial indexado possibilita tanto oacesso seqencial quanto o acesso randmico. Entretanto, este mtodo adequado apenas para aplicaes nas quais as operaes de insero e deretirada ocorrem com baixa freqncia. Sua grande vantagem a garantia deacesso aos dados com apenas um deslocamento do mecanismo de acesso dodisco magntico. Sua grande desvantagem a inflexibilidade: em umambiente muito dinmico, com muitas operaes de insero e retirada, osdados tm que sofrer reorganizaes freqentes. Pelo fato de combinar acesso indexado com a organizao seqencial omtodo chamado de acesso seqencial indexado. Para aproveitar as carac-tersticas do disco magntico e procurar minimizar o nmero de deslocamen-tos do mecanismo de acesso utiliza-se um esquema de ndices de cilindros e depginas. Dependendo do tamanho do arquivo e da capacidade da memriaprincipal disponvel possvel acessar qualquer registro do arquivo de dadosrealizando apenas um deslocamento do mecanismo de acesso. Para tal, umndice de cilindros contendo o valor de chave mais alto dentre os registros 4.rvore B

As rvores B so rvores balanceadas projetadas para trabalhar com dispositivos de armazenamento secundrio como discos magnticos. Elas visam otimizar as operaes de entrada e sada nos dispositivos. O tempo de acesso s informaes em um disco prejudicado principalmente pelo tempo de posicionamento do brao de leitura. Uma vez que o brao esteja posicionado no local correto, a leitura pode ser feita de forma bastante rpida. Desta forma, devemos minimizar o nmero de acessos ao disco. Diferente das rvores binrias, cada n em uma rvore B pode ter muitos filhos, isto , o grau de um n pode ser muito grande. Definio: Uma rvore B possui as seguintes propriedades: 1. Todo o n X possui os seguintes campos: a. n, o nmero de chaves armazenadas em X; b. as n chaves k1, k2...kn so armazenadas em ordem crescente; c. folha, que indica se X uma folha ou um n interno. 2. Se X um n interno ento ele possui n+1 ponteiros f1, f2...fn+1 para seus filhos (podendo alguns serem nulos) 3. Se ki alguma chave na sub-rvore apontada por fi, ento

4. Todas as folhas da rvore esto na mesma altura (que a altura da rvore).

5. Existe um nmero mximo e mnimo de filhos em um n. Este nmero pode ser descrito em termos de um inteiro fixo t maior ou igual a 2 chamado grau mnimo. a. Todo o n diferente da raiz deve possuir pelo menos t-1 chaves. Todo o n interno diferente da raiz deve possuir pelo menos t filhos. Se a rvore no vazia, ento a raiz possui pelo menos uma chave. Todo o n pode conter no mximo 2t - 1 chaves. Logo um n interno pode ter no mximo 2t filhos. Dizemos que um n cheio se ele contm 2t - 1 chaves.

b.

Você também pode gostar