Anda di halaman 1dari 3

Contando Inverses

Este problema surge na anlise de rankings (classificaes) que tem ser tornado importante para um grande nmero de aplicaes. Por exemplo, considere uma ferramenta de meta-search na internet, que executa uma mesma query em diferentes motores de buscas (search engines) como Google,Yahoo entre outros e tenta sintetiza o resultados procurando por similaridades e diferenas entre os vrios rankings que so retornados pelos motores de busca. Outra aplicao interessante seria comparar um conjunto de rankings sobre alguma preferncia (livros, filmes, restaurantes) para criar um tipo de filtro colaborativo. Agora, qual a melhor medida que pode ser usada para saber quo similar so duas classificaes? Problema Uma maneira natural seria quantificar a noo de similaridade contando o nmero de inverses. Ns dizemos que dois ndices i < j formam uma inverso se ai > aj, ou seja, se dois elementos ai e aj esto fora de ordem. Existe um apelo geomtrico para visualiza o nmero de inverses em uma permutao.

Neste exemplo, temos 3 inverses nestas sequncia: (2,1), (4,1) e (4,3). Note que uma cada interseco de um par de segmentos corresponde a uma inverso. Modelando e Analisando o Algoritmo O algoritmo ingnuo para contar as inverses seria checar todos os pares de nmeros (ai,aj) e determinar se eles formam uma inverso; isto seria O(n2). Ns vamos mostrar como contar o nmero de inverso muito mais rapidamente, em O(n log n). Observe que todo par pode formar uma inverso, e ento existe no mximo inverses. Logo, o nmero de inverses quadrtico. Dessa maneira, o algoritmo

que vamos desenvolver tem que ser capaz de computar o total de inverses sem precisar checar cada inverso individualmente. Idia Bsica Considere m = e divida a lista em duas sublistas a1,..,am e am+1,,an. Primeiramente,

vamos contar o nmero de inverses em cada metade separadamente. Ento vamos contar o nmero de inverses (ai,aj), onde os dois nmeros pertencem a metades diferentes; o truque fazer esta parte em O(n). Vamos fazer uma adaptao do algoritmo Merge-Sort.

Durante a intercalao, precisamos contar o nmero de inverses.

Se o elemento ai for colocado na lista ordenada, nenhuma inverso encontrada, uma vez que ai menor que todos os elementos da lista B. Por outro lado, se bj for colocado na lista ordenada, ento bj menor que todos os elementos restantes em A, e ele aparece depois de todos eles, ento ns precisamos incrementar o nmero de inverses pelo nmero de elementos restantes em A. Esta a idia crucial: em tempo constante, ns podemos calcular um nmero grande de inverses em potencial.

Problema http://code.google.com/codejam/contest/dashboard?c=619102#s=p0&a=0 http://br.spoj.pl/problems/BALDES/

Anda mungkin juga menyukai