entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Ayuda con un algoritmo recursivo

Bueno les comento que este problema me ha confundido un poco aparte de ser recursivo no me permite usar vector auxiliar, les agradecería si alguien me pudiese ayudar... de antemano gracias...a continuación les coloco el problema:

Dados un vector V [1..n] y un numero natural k entre 1 y n−1, diseñar un algoritmo eficiente que transponga los k primeros elementos de V con los elementos en las n − k ultimas posiciones, sin hacer uso de un vector auxiliar. Por ejemplo, si V es el siguiente vector con 10 elementos

a b c d e f g h i j

y k = 3, el resultado deseado es:

d e f g h i j a b c

Se me olvidaba decirles que es para realizarlo en C++ ...pero si me lo pudiesen explicar en otro lenguaje no importa.

1 Respuesta

1voto

Leonardo-Tadei Puntos227320

Hola @Juniorx7:

un algoritmo para solucionar este problema sin usar un vector auxiliar, es hacer un corrimiento a izquierda de todo el vector K veces. Para hacer el corrimiento solo necesitas una variable auxiliar.

Una posible solución en pseudocódigo sería:

para i desde 1 hasta k
   aux = V[1]   // guardo el primer valor
   para j desde 1 hasta largo(V)-1
      V[j] = V[j+1]   // corro cada valor a la izquierda.
   finpara
   V[largo(V)] = aux   // asigno al último elemento el primero, previamente guardado.
finapara

Para llevar esto a C++ deberás tener en cuenta que los vectores comienzan con índice 0. Seguro hay otras coluciones posibles, pero la verdad que al problema no le veo la necesidad de usar recursión.

0voto

Juniorx7 comentado

Muchas gracias por disponer tu tiempo en responder mi pregunta... Bueno mas o menos entendí...Estoy poco familiarizado con Pseudocodigo...me queda una duda en el segundo ciclo cuando escribes específicamente.. hasta "largo" (V)-1 ...que significa largo allí...Perdona mi ignorancia pero apenas empiezo en programación... Y bueno lo de realizarlo recursivamente es porque así me lo piden..Pero de todas formas Gracias.

1voto

Leonardo-Tadei comentado

Con

largo(V)-1 

estoy representando la cantidad de elementos del vector, menos 1 elemento.

En C, si no me falla la memoria, la función sizeof() devuelve el tamaño de un vector.

Te respondí en pseudocódigo, porque si no entiendo mal estás haciendo un ejercicio para aprender a programar, y por tanto la experiencia de pensar el algoritmo por un lado y la de pasar ese algoritmo a código es algo que es mucho mejor para tu aprendizaje que lo resulevas vos.

Saludos cordiales.

0voto

Leonardo-Tadei comentado

Te sirvió la respuesta?
Pudiste implementarlo?

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta