La idea de proyecto es tan simple como colocar una seria de numeros en un numero maximo de movmientos, disponemos de dos stacks y solo podemos movernos de determinada manera, mediante unos movimeitos concretos que tienen un coste de 1 por movimieto. Los movmientos son los siguientes.
sa (swap a): Swap the first 2 elements at the top of the stack a. Does nothing if there is only one or none.sb (swap b) : Swap the first 2 elements at the top of the stack b. Does nothing if there is only one or none.ss : sa and sb at the same time.pa (push a): Takes the first element on top of b and puts it on a. Does nothing if b is empty.pb (push b): Takes the first element on top of a and puts it on b. Does nothing if a is empty.ra (rotate a): Shifts all the elements of the stack a up by one position. The first element becomes the last.rb (rotate b) : Shifts all the elements of the stack b one position upwards. The first element becomes the last one.rr : ra and rb at the same time.rra (reverse rotate a): Shifts all elements of the stack down one position. the stack a. The last element becomes the first.rrb (reverse rotate b): Shifts all the elements of the stack b one position downwards. the stack b. The last element becomes the first.rrr : rra and rrb at the same time.este proyecto se basa mas en saber interpretar la notacion On, ver lo requereminientos en base a a los timepos de ejecucion segun las entradas que nos piden y sacar su O(n). Despues escoger un algoritmo que se adapte a esso requerimientos e interpretarlo.
Como lo que importan son los movimientos y adaptar nuestro algoritmo a esso movimientos, da igual que estructura de datos usemos poruqe ele resultado de nuestro programa van a aser unas ordenes, hay dos maneras, o las metemos en un array y las devolvermos al final o cada vez que hagamos una orden al escribimos directamente.
Puede ser que cada movieminto se defiuna en una funcion yque esa funcion sea la que iimprima las ordenes por pantalla o las pase al array (si no me cabe en una misma funcion tendere que dividir cada movimeitno en dos funciones y que o bine un ase llame a la otra cada vez que hagamos un movimiento o qe ambas dos esten empaquetadas en una, no vale lo de meter los punteros a fucniones dentro de un nodo ya qu eun nod o no puede incluir funciones no son clases de c++). IGUAL LOS ARRAYS DE FUNCIONES SE PUEDEN USAR PERO ESO ES MUCHO LIO HABALR CON ANDRES.
Despues hay que escoger la estructura de datos donde almacenaremos los datos a ordenar. Pueden ser lineales los stacks (metidos en nodos o en punteros) o pueden ser directamente nodos (cada nodo un nummero). No hay mas maneras de hacerlo porque el enunciado te limita, lo unico que se puede hacer es tener datos controladores en otro tipo de estructura que guarde relacion o este comnectada con nuestris stacks para poder hacer la operaciones de los movimientos mas eficionetes ,por por ejemplo no podemos usar, arbioles, grafos, y demas… ya que no tendria sentido (seguramente) y el enunciado lo limita por como se han de hacer los movimientos.
Por como se peuden hacer los mivientos si que se peude deducir que estamos ante dos colas (ya que solo se hace push en un sentido). ¿Esto significa que las colas hacen este tipode operaciones mas eficientees o es casualidad?
Las divisiones dentro de algoritmos de merge seran solo dos por los miviemtos y el nuemro de stacks que nos dejan usar. Hacerlos con mas es imposible en este caso porque no pdriamos imprimir los movimientos de las operaciones que les vaamos a mansdar al tester.