freeCodeCamp/curriculum/challenges/spanish/08-coding-interview-prep/rosetta-code/hash-join.spanish.md

10 KiB
Raw Blame History

title id challengeType videoUrl localeTitle
Hash join 5956795bc9e2c415eb244de1 5 Hash unirse

Description

Una unión interna es una operación que combina dos tablas de datos en una tabla, basada en valores de columna coincidentes. La forma más sencilla de implementar esta operación es el algoritmo de unión de bucle anidado , pero una alternativa más escalable es el algoritmo de combinación de hash .

Implemente el algoritmo de "combinación hash" y demuestre que pasa el caso de prueba que se indica a continuación.

Debe representar las tablas como estructuras de datos que se sienten naturales en su lenguaje de programación.

El algoritmo "hash join" consta de dos pasos:

Fase de hash: cree un multimapa a partir de una de las dos tablas, asignando desde cada valor de columna de unión a todas las filas que lo contienen. El multimapa debe admitir una búsqueda basada en hash que se amplíe mejor que una búsqueda lineal simple, porque ese es el punto central de este algoritmo. Idealmente, deberíamos crear el multimapa para la tabla más pequeña, minimizando así el tiempo de creación y el tamaño de la memoria. Fase de unión: escanee la otra tabla y busque filas coincidentes buscando en el multimapa creado anteriormente.

En el pseudocódigo, el algoritmo podría expresarse como sigue:

 sea A = la primera tabla de entrada (o idealmente, la más grande)
sea B = la segunda tabla de entrada (o idealmente, la más pequeña)
sea j A = el ID de la columna de unión de la tabla A
sea j B = el ID de la columna de unión de la tabla B
sea M B = un multimapa para mapear desde valores individuales a múltiples filas de la tabla B (comienza vacío)
sea C = la tabla de salida (comienza vacía)
para cada fila b en la tabla B:
  coloque b en el multimapa M B debajo de la tecla b (j B )
para cada fila a en la tabla A:
  para cada fila b en multimapa M B bajo la tecla a (j A ):
    sea c = la concatenación de la fila a y la fila b
    coloca la fila c en la tabla C 

Caso de prueba

Entrada

A =
Años Nombre
27 Jonás
18 Alan
28 Gloria
18 Popeye
28 Alan
B =
Personaje Justicia
Jonás Ballenas
Jonás Arañas
Alan Fantasmas
Alan Zombies
Gloria Buffy
j A = Name (es decir, columna 1) j B = Character (es decir, columna 0)

Salida

A. Edad Un nombre B. Caracter B.Nemesis
27 Jonás Jonás Ballenas
27 Jonás Jonás Arañas
18 Alan Alan Fantasmas
18 Alan Alan Zombies
28 Gloria Gloria Buffy
28 Alan Alan Fantasmas
28 Alan Alan Zombies

El orden de las filas en la tabla de salida no es significativo.

Si está utilizando matrices indexadas numéricamente para representar filas de la tabla (en lugar de referirse a las columnas por su nombre), podría representar las filas de salida en la forma [[27, "Jonah"], ["Jonah", "Whales"]] .


Instructions

Tests

tests:
  - text: <code>hashJoin</code> es una función.
    testString: 'assert(typeof hashJoin === "function", "<code>hashJoin</code> is a function.");'
  - text: '<code>hashJoin([{ age: 27, name: &quot;Jonah&quot; }, { age: 18, name: &quot;Alan&quot; }, { age: 28, name: &quot;Glory&quot; }, { age: 18, name: &quot;Popeye&quot; }, { age: 28, name: &quot;Alan&quot; }], [{ character: &quot;Jonah&quot;, nemesis: &quot;Whales&quot; }, { character: &quot;Jonah&quot;, nemesis: &quot;Spiders&quot; }, { character: &quot;Alan&quot;, nemesis: &quot;Ghosts&quot; }, { character:&quot;Alan&quot;, nemesis: &quot;Zombies&quot; }, { character: &quot;Glory&quot;, nemesis: &quot;Buffy&quot; }, { character: &quot;Bob&quot;, nemesis: &quot;foo&quot; }])</code> debe devolver <code>[{&quot;A_age&quot;: 27,&quot;A_name&quot;: &quot;Jonah&quot;, &quot;B_character&quot;: &quot;Jonah&quot;, &quot;B_nemesis&quot;: &quot;Whales&quot;}, {&quot;A_age&quot;: 27,&quot;A_name&quot;: &quot;Jonah&quot;, &quot;B_character&quot;: &quot;Jonah&quot;, &quot;B_nemesis&quot;: &quot;Spiders&quot;}, {&quot;A_age&quot;: 18,&quot;A_name&quot;: &quot;Alan&quot;, &quot;B_character&quot;: &quot;Alan&quot;, &quot;B_nemesis&quot;: &quot;Ghosts&quot;}, {&quot;A_age&quot;: 18,&quot;A_name&quot;: &quot;Alan&quot;, &quot;B_character&quot;: &quot;Alan&quot;, &quot;B_nemesis&quot;: &quot;Zombies&quot;}, {&quot;A_age&quot;: 28,&quot;A_name&quot;: &quot;Glory&quot;, &quot;B_character&quot;: &quot;Glory&quot;, &quot;B_nemesis&quot;: &quot;Buffy&quot;}, {&quot;A_age&quot;: 28,&quot;A_name&quot;: &quot;Alan&quot;, &quot;B_character&quot;: &quot;Alan&quot;, &quot;B_nemesis&quot;: &quot;Ghosts&quot;}, {&quot;A_age&quot;: 28,&quot;A_name&quot;: &quot;Alan&quot;, &quot;B_character&quot;: &quot;Alan&quot;, &quot;B_nemesis&quot;: &quot;Zombies&quot;}]</code>'
    testString: 'assert.deepEqual(hashJoin(hash1, hash2), res, "<code>hashJoin([{ age: 27, name: "Jonah" }, { age: 18, name: "Alan" }, { age: 28, name: "Glory" }, { age: 18, name: "Popeye" }, { age: 28, name: "Alan" }], [{ character: "Jonah", nemesis: "Whales" }, { character: "Jonah", nemesis: "Spiders" }, { character: "Alan", nemesis: "Ghosts" }, { character:"Alan", nemesis: "Zombies" }, { character: "Glory", nemesis: "Buffy" }, { character: "Bob", nemesis: "foo" }])</code> should return <code>[{"A_age": 27,"A_name": "Jonah", "B_character": "Jonah", "B_nemesis": "Whales"}, {"A_age": 27,"A_name": "Jonah", "B_character": "Jonah", "B_nemesis": "Spiders"}, {"A_age": 18,"A_name": "Alan", "B_character": "Alan", "B_nemesis": "Ghosts"}, {"A_age": 18,"A_name": "Alan", "B_character": "Alan", "B_nemesis": "Zombies"}, {"A_age": 28,"A_name": "Glory", "B_character": "Glory", "B_nemesis": "Buffy"}, {"A_age": 28,"A_name": "Alan", "B_character": "Alan", "B_nemesis": "Ghosts"}, {"A_age": 28,"A_name": "Alan", "B_character": "Alan", "B_nemesis": "Zombies"}]</code>");'

Challenge Seed

function hashJoin (hash1, hash2) {
  // Good luck!
  return [];
}

After Test

console.info('after the test');

Solution

// solution required