[R-br] Recusão no R, problemas ao implementar o algoritimo insertionsort no R

Augusto Ribas ribas.aca em gmail.com
Terça Outubro 29 16:04:55 BRST 2013


Nossa, muito obrigado, funcionou perfeitamente. Estava ficando frustado sem
saber o que fazer :)
Eu fiz essa função primeiro em C, e estava apanhando para transcrever em R,
faltou uma atribuição ali.

Por isso a bagunça nos "<-" e "=".

Agora preciso entender melhor o que está acontecendo.

Mas novamente muito obrigado pela ajuda :)


Em 29 de outubro de 2013 14:44, Manoel Galdino <mcz.fea em gmail.com> escreveu:

> Eu não entendi muito bem. Ajudaria se você comentasse seu código, desse
> nomes mais significativos (ao invés de "aux", que tal
> "valor_a_ser_inserido"?) e usasse uma sintaxe consistente (ora você usa "="
> para atribuição, ora "<-", mas tente isso:
>
> insertionsortR<-function(vetor,n) {
>
>     if(n>1) {
>         vetor <- insertionsortR(vetor,n-1) ## mudei o código aqui nessa
> linha
>         aux=vetor[n]
>         i=n
>         while(vetor[i-1]> aux && i > 1) {
>             vetor[i]<-vetor[i-1]
>             i<- i-1
>             }
>         vetor[i]<-aux
>         }
>
>     return(vetor)
>     }
>
>
>
> 2013/10/29 Augusto Ribas <ribas.aca em gmail.com>
>
>> Ola pessoa, eu estava tentando implementar o algorítimo insertion sort no
>> R de forma recursiva, mas não estou conseguindo e também não consigo
>> identificar onde estou errado.
>>
>> #Veja so. Eu tenho um vetor qualquer:
>>
>> vetor<-sample(100)
>> vetor
>>
>> #Iterativamente ele funciona beleza, eu fiz assim:
>>
>> insertionsort<-function(vetor){
>>     n<-length(vetor)
>>
>>     for(i in 2:n) {
>>         aux=vetor[i]
>>         j=i-1
>>         while(j>=1 && vetor[j]>aux) {
>>             vetor[j+1]<-vetor[j]
>>             j=j-1
>>             }
>>         vetor[j+1]=aux
>>         }
>>     return(vetor)
>>     }
>>
>> insertionsort(vetor)
>>
>> #Mas quando tento usar recursão, não consigo fazer funcionar, ele não
>> organiza
>>
>> insertionsortR<-function(vetor,n) {
>>
>>     if(n>1) {
>>         insertionsortR(vetor,n-1)
>>         aux=vetor[n]
>>         i=n
>>         while(vetor[i-1]>aux && i>1) {
>>             vetor[i]<-vetor[i-1]
>>             i<-i-1
>>             }
>>         vetor[i]<-aux
>>         }
>>
>>     return(vetor)
>>     }
>>
>>
>> insertionsortR(vetor,length(vetor))
>>
>> #Usando o rcpp ele funcionou dessa forma aqui:
>>
>> cppFunction("
>>     NumericVector insertionsortRC(NumericVector vetor, int n) {
>>
>>         double aux;
>>         int i;
>>
>>         if(n>1) {
>>             insertionsortRC(vetor,n-1);
>>             aux=vetor[n-1];
>>             i=n-1;
>>             while(vetor[i-1]>aux && i>=0 ) {
>>                 vetor[i]=vetor[i-1];
>>                 i--;
>>                 }
>>             vetor[i]=aux;
>>             }
>>
>>         return vetor;
>>         }
>>     ")
>>
>> insertionsortRC(vetor,length(vetor))
>>
>> Alguém sabe dizer onde estou errado la no insertionsort no R. Eu imagino
>> se estou imaginado errado o funcionamento dos vetores no R, se ele ta
>> refazendo um novo vetor a cada chamada e no final nada da certo do jeito
>> que estou fazendo.
>>
>> Recursão funciona beleza no R, por exemplo usando fatorial:
>>
>> fatorial<-function(n) {
>>     if(n==1) {
>>         return(1)
>>         } else {
>>             return(n*fatorial(n-1))
>>             }
>>     }
>>
>> fatorial(5)
>>
>> Mas no caso do vetor, não entendi o funcionamento ali dos vetores, se
>> alguém puder dar uma luz :)
>>
>> --
>> Grato
>> Augusto C. A. Ribas
>>
>> Site Pessoal: http://recologia.com.br/<http://augustoribas.heliohost.org>
>> Github: https://github.com/Squiercg
>> Lattes: http://lattes.cnpq.br/7355685961127056
>>
>> _______________________________________________
>> R-br mailing list
>> R-br em listas.c3sl.ufpr.br
>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>> código mínimo reproduzível.
>>
>
>
>
> --
> Manoel Galdino
> https://sites.google.com/site/galdinomcz/
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>



-- 
Grato
Augusto C. A. Ribas

Site Pessoal: http://recologia.com.br/ <http://augustoribas.heliohost.org>
Github: https://github.com/Squiercg
Lattes: http://lattes.cnpq.br/7355685961127056
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20131029/574af1e7/attachment.html>


Mais detalhes sobre a lista de discussão R-br