Página Inicial do Fórum > Java Básico

Complexidade computacional



Criar novo tópico   Responder tópico


  1. [PT]Devilishly
    Posts:178


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Boas!

    Estou a ter algumas duvidas em saber como determinar a ordem de complexidade em algoritmos e gostava de saber se alguem me poderia ajudar nesta minha duvida...

    Portanto, tenho o seguinte algoritmo, para determinar se a soma de dois qq numeros de um vector sao iguais a 10:

    Segundo o q me foi explicado, este algoritmo teria ordem N^2.

    Como faria para passar de O(N^2) para O(NlogN) ???

    Obrigado e fikem bem,
    [PT]Devilishly
    _________________
    PalcoPrincipal




  1. rafael_afonso
    Posts:625


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Olá:

    Repare que tanto o loop externo quanto o interno a iteração vai até o tamanho do array (chamemos de N). Portanto Este algorítmo seria de ordem quadrática ou O(N ^2).
    Para passar de O(N ^2) para O(N * Log N) acho difícil. O que você pode fazer são algumas otimizações. Primeiro ordene seu array (usando Arrays.sort(int[]).
    No loop externo você verifica se vec > k. Se for sai do loop externo, pois a partir daí todas as somas serão maior que k. No loop interno verifica se a soma vec + vec[j] é maior que k. Se for sai do loop interno pelo mesmo motivo acima.
    O código ficaria assim:

    O pior caso seria se todos os elementos de vec forem menor que k e todas as somas também forem menor que k. Neste caso, como consequência de ter que varrer todos os elementos do vetor, a ordem também será quadrática.

    Grato,
    _________________
    Rafael U. C. Afonso
    [i]Where is debug?
    Debug is on the table[/i]




  1. [PT]Devilishly
    Posts:178


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Boas!

    Podes-me explicar matematicamente, pq q esse algoritmo é N*LogN ???
    É q foi-me dito q o algoritmo Binary Search é de ordem Log(N) e q caso o aplicasse neste contexto, obteria uma ordem do tipo N*LogN

    Isto é mesmo assim???

    Fikem bem,
    [PT]Devilishly
    _________________
    PalcoPrincipal




  1. rafael_afonso
    Posts:625


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Olá:

    Procurando pela net achei esta página do curso de Computação da USP (os código de exemplo estão em C, que é parecido com Java). Dê uma olhada na parte "Desempenho da função". Talvez isso esclareça alguma coisa. Se não, dê uma procura no google por fficial">binary search. Espero que isso ajude.

    Grato,
    _________________
    Rafael U. C. Afonso
    [i]Where is debug?
    Debug is on the table[/i]




  1. [PT]Devilishly
    Posts:178


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Obrigado rafael_afonso

    Vou estudar o assunto...

    Fikem bem,
    [PT]Devilishly
    _________________
    PalcoPrincipal




  1. Relacionados





Novo tópico   Responder tópico     Índice do forum -> Java Básico