Seja bem vindo ao Fórum do JavaFree.org
Aqui você irá encontrar respostas para TUDO o que você precisa sobre java.
Deseja participar? Crie sua conta ou efetue seu login
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
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]
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
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]
[PT]DevilishlyPosts:178
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
rafael_afonsoPosts:625
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]
[PT]DevilishlyPosts:178
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
rafael_afonsoPosts:625
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]
[PT]DevilishlyPosts:178
Obrigado rafael_afonso
Vou estudar o assunto...
Fikem bem,
[PT]Devilishly
_________________PalcoPrincipal
Relacionados
Montar Classe Test JUnit com Bublesort
http://javafree.uol.com.br/topic-890676-Montar-Classe-Test-JUnit-com-Bublesort.html
Duvida gerar um horário de aulas aleatório
http://javafree.uol.com.br/topic-890656-Duvida-gerar-um-horario-de-aulas-aleatorio.html
Dúvida com Padrões de Projeto - Permissões.
http://javafree.uol.com.br/topic-890664-Duvida-com-Padroes-de-Projeto-Permissoes.html
COMO CHAMAR UMA APLICAÇÃO NO JAVA.
http://javafree.uol.com.br/topic-890643-COMO-CHAMAR-UMA-APLICACAO-NO-JAVA.html
Preciso de ajuda em conversor binário [Erro]
http://javafree.uol.com.br/topic-890678-Preciso-de-ajuda-em-conversor-binario-Erro.html