COMPARTE ESTE ARTÍCULO

¿Cómo usar este post?

  1. Imprime o copia los enunciados y cubre las secciones de código-solución con la etiqueta de “spoiler” de tu editor de WordPress (o simplemente no las mires).
  2. Pon un cronómetro de 2 h 30 min e intenta resolverlo “a pelo”.
  3. Compara tu resultado con la solución oficial que encontrarás más abajo.
  4. Repite hasta que obtengas al menos 8/10 correctamente.

1️⃣ Enunciado del Simulacro

Bloque 1 – Listas Dobles (dll_t)

  1. (1 pto) Implementa template <typename T> void dll_t<T>::extract(dll_node_t<T>* nodo); que elimine cualquier nodo de la lista (incluidos cabeza y cola) en O(1).
  2. (1 pto) Implementa template <typename T> void dll_t<T>::reverse(); que invierta la lista in-place, sin estructuras auxiliares.

Bloque 2 – Conversión de Bases

  1. (2 ptos) Desarrolla vector_t<unsigned> to_base(unsigned n, unsigned short b); que convierta n (decimal) a su representación en base b (2 ≤ b ≤ 9).

Bloque 3 – Shunting-Yard

  1. (2 ptos) Convierte una expresión infija con + - * / a postfija: queue_l_t<char> infixToPostfix(const vector_t<char>& expr);

Bloque 4 – Backtracking

  1. (2 ptos) Completa la función recursiva void generate(int x[], int i, int sumA, int n, int totalSum, const int values[]); que muestre todas las particiones del conjunto values[] en dos subconjuntos de suma idéntica.

Bloque 5 – Matrices

  1. (0,5 + 1,5 ptos)
    a) Versión iterativa es_simetrica
    b) Versión recursiva es_simetrica_rec
  2. (1 pto) Implementa void trasponer(matrix_t<int>& A); que trasponga una matriz cuadrada in-place.

Bloque 6 – Extensión

  1. (2,5 ptos) Producto escalar recursivo de vector disperso: double sparse_vector_t::scal_prod(const vector_t<double>& w, int i = 0);
  2. (1 pto) Intersección de dos listas simples sin repes: template<> void sll_t<int>::intersect(sll_t<int>& A, sll_t<int>& B);

Hasta aquí el examen.
————— NO SIGAS LEYENDO si quieres hacerlo sin mirar —————


2️⃣ Soluciones oficiales

2.1 Listas Dobles

2.1.1 dll_t<T>::extract

Complejidad: O(1).


2.1.2 dll_t<T>::reverse

Memoria extra: O(1).


2.2 Conversión de Bases

Coste: O(log₍b₎ n).


2.3 Shunting-Yard

Coste: O(n).


2.4 Partición Equitativa (Backtracking)

Poda opcional: cortar ramas cuando sumA > totalSum/2.


2.5 Matrices

2.5.1 Iterativa es_simetrica

2.5.2 Recursiva es_simetrica_rec

2.5.3 Trasposición in-place


2.6 Extra

2.6.1 Producto escalar (vector disperso × vector denso)

double sparse_vector_t::scal_prod(const vector_t<double>& w, int i)
{
    assert(n_ == w.get_size());     // mismos tamaños
    if (i == nz_) return 0.0;       // caso base

    return at(i).get_val() * w[ at(i).get_inx() ]
         + scal_prod(w, i+1);
}

2.6.2 Intersección de listas simples

template<>
void sll_t<int>::intersect(sll_t<int>& A, sll_t<int>& B)
{
    clear();                                     // vacía lista destino
    for (auto* p = A.get_head(); p; p = p->get_next())
        if (B.search(p->get_data()))
            push_front(new sll_node_t<int>(p->get_data()));
}

3️⃣ Script de autocorrección rápida

Agrega al final de tu proyecto:

int main()
{
    // ----- extract + reverse -----
    dll_t<int> L;
    for (int k : {1,2,3,4}) L.push_back(new dll_node_t<int>(k));
    L.extract(L.get_head()->get_next());      // elimina 2
    L.reverse();
    assert(L.get_head()->get_data()==4 && L.get_tail()->get_data()==1);

    // ----- conversión de base -----
    auto b8 = to_base(100,8);
    assert(b8[0]==1 && b8[1]==4 && b8[2]==4);

    // ----- infix → postfix -----
    vector_t<char> e({'7','+','3','*','2','-','5','/','1'});
    auto q = infixToPostfix(e);
    std::string s; while(!q.empty()){s+=q.front();q.pop();}
    assert(s=="732*+51/-");

    std::cout<<"✓ Todos los tests pasan\n";
}

4️⃣ Consejos finales

  • Compila siempre con g++ -std=c++17 -Wall -Wextra -pedantic.
  • Usa assert para documentar pre- y post-condiciones.
  • Si te atascas, pasa al ejercicio siguiente: cada punto cuenta.
  • La eficiencia (Big-O) vale fácilmente medio punto por problema.

¡Listo! Con estas soluciones ya tienes un mapa completo de lo que suele caer y cómo abordarlo eficazmente.
Si detectas alguna mejora o error, déjalo en comentarios. ¡Buena suerte en tu examen! 🚀


¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.


¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos. 

 

 


NUESTRAS ÚLTIMAS PUBLICACIONES

INSTAGRAM

TIKTOK


 …Y PRONTO MUCHAS MÁS

AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.

Contenido restringido

Acceso de usuarios existentes
   
Registro de un nuevo usuario
*Campo necesario

Tags:

Comments are closed

Estado de acceso
ESTADO DE ACCESO
TRADUCTORES
COMPARTENOS
error: CONTENIDO PROTEGIDO