next up previous
Next: About this document ...

MAC-IME-USP IMRE SIMON CARLOS EDUARDO FERREIRA


SALA 290A TEL.: 3818 6142 SALA 297A TEL.: 3818 6140


EMAIL is@ime.usp.br E-MAIL cef@ime.usp.br


MONITORA: ELIDIA Y. ITIKAWA MONITOR: MARCIO C. CABRAL




MAC 122 - Princ�pios de Desenvolvimento de Algoritmos

Segundo semestre de 2000

Exerc�cio-Programa 3 - Entrega: 21 de novembro de 2000



Ordena��o
(pode ser feito em duplas)



Este exerc�cio-programa ser� avaliado pelo c�digo e tamb�m pelos testes que voc�s fizerem para avaliar a corretude e efici�ncia do algoritmo, assim como o relat�rio com os resultados que voc�s obtiverem para o problema proposto.



Um dos algoritmos que estudamos nas aulas para ordena��o de vetores foi o bubblesort. A id�ia deste algoritmo � aplicar sucessivamente invers�o de pares de elementos que est�o na ordem incorreta, at� que ao final de certo n�mero de passos o vetor estar� ordenado. A id�ia deste exerc�cio-programa � oferecer uma opera��o de invers�o mais ``poderosa'', e buscar algoritmos de ordena��o mais eficientes utilizando tal opera��o.

Escreva uma fun��o inverte com o seguinte prot�tipo

int inverte (int v[], int i, int k, int n)
que, quando aplicada inverte a ordem dos elementos v[i], v[i+1], $\dots$, v[i+k-1], caso isso seja poss�vel, e retorna 1. Se $i+k-1 \ge n$, a fun��o n�o altera a ordem dos elementos no vetor e retorna 0.

Exemplo: Suponha que o vetor cont�m os elementos 1, 3, 4, 2, 6, 7, 8, 9, 5. Ao aplicarmos inverte(v, 3, 3, 9) obtemos no vetor a seguinte ordem: 1, 3, 4, 7, 6, 2, 8, 9, 5. Ao aplicarmos ao mesmo vetor inicial inverte(v, 0, 4, 9) obtemos: 2, 4, 3, 1, 6, 7, 8, 9, 5.

Sua tarefa neste exerc�cio-programa � escrever algoritmos que recebam um vetor com $n$ elementos e ordenam este vetor, utilizando a opera��o inverte descrita acima. Obviamente um jeito f�cil de fazer isso � implementar o bubblesort (as trocas s�o chamadas do inverte com $k=2$). Este algoritmo faz no m�ximo $O(n^2)$ chamadas da fun��o inverte.

Uma aplica��o deste exerc�cio-programa ocorre em Biologia Computacional. Sabemos que o DNA � uma cadeia dupla de unidades b�sicas (bases nitrogenadas) e uma forma de tentar estabelecer graus de ``parentesco'' (ou proximidade) entre esp�cies � calcular o n�mero m�nimo de opera��es b�sicas (muta��es, revers�es, transloca��es, etc) que levam a seq��ncia gen�tica de um indiv�duo de uma esp�cie em um da outra. Uma dessas opera��es � a revers�o. Uma revers�o ocorre quando um ``peda�o'' do DNA se desprende e se ``cola'' novamente na seq��ncia, por�m na ordem invertida. Esse fen�meno parece ser relativamente freq�ente, e seu estudo � de interesse aos pesquisadores de filogenias. Podemos pensar no problema de transformar uma seq��ncia de DNA em outra atrav�s de ``revers�es'' como o problema de ordenar uma seq��ncia atrav�s de aplica��es da fun��o inverte.

Este exerc�cio-programa est� aberto a diversas perguntas, que voc�s poder�o e dever�o explorar em suas solu��es:




next up previous
Next: About this document ...
Carlos Eduardo Ferreira
2000-10-19