Skip to content

The-Spik3r/algorithm-HashMap-Map

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 Chatbot Flow Navigator - HashMap Algorithm

Python TypeScript Node.js License

Un algoritmo optimizado con HashMap para navegación eficiente en flujos de chatbot, implementado tanto en Python como en TypeScript/JavaScript con benchmarks completos de rendimiento y memoria.

📋 Tabla de Contenidos

🎯 Características

  • Algoritmo O(1) para acceso a nodos por ID
  • Búsqueda O(k) donde k = edges del nodo actual
  • Implementación dual: Python y TypeScript/JavaScript
  • Benchmarks exhaustivos de rendimiento y memoria
  • Generación automática de datasets grandes para testing
  • Medición precisa de microsegundos y uso de memoria
  • Comparación directa entre lenguajes
  • Datos anonimizados seguros para repositorios públicos

⚡ Quick Start

# Clonar el repositorio
git clone https://github.com/The-Spik3r/algorithm-HashMap-Map.git
cd algorithm-HashMap-Map

# Configuración inicial
npm run setup

# Demo rápido
npm run demo

# Benchmark completo
npm run benchmark:comparison

🏗️ Instalación

Requisitos Previos

  • Python 3.8+ con psutil
  • Node.js 18+ con npm
  • Sistema Linux/Ubuntu (para scripts de shell)

Instalación Paso a Paso

# 1. Instalar dependencias de Node.js
npm install

# 2. Instalar dependencias de Python
sudo apt install python3-psutil -y

# 3. Verificar instalación
python3 --version
node --version
npm --version

📊 Benchmarks

🏃‍♂️ Ejecutar Benchmarks

# Benchmark básico (datasets pequeños)
npm run benchmark:simple

# Benchmark avanzado con medición de memoria
npm run benchmark:python-advanced
npm run benchmark:js

# Comparación completa Python vs JavaScript
npm run benchmark:comparison

# Generar datasets grandes y benchmarking completo
npm run test:large

📈 Resultados Típicos

Dataset Nodos Python (Memoria) JavaScript (Memoria) Python (Velocidad) JavaScript (Velocidad)
Pequeño 11 0.00 MB 7.18 MB 0.6 μs 0.2 μs
Mediano 1K 3.06 MB 2.53 MB 0.6 μs 0.2 μs
Grande 5K 11.98 MB 20.67 MB 0.5 μs 0.4 μs
Muy Grande 10K 24.99 MB 31.02 MB 0.5 μs 0.1 μs

🧪 Scripts Disponibles

📋 Scripts Principales

Script Descripción
npm run demo Demo rápido con dataset original
npm run generate-data Genera datasets grandes (1K, 5K, 10K nodos)
npm run clean-sensitive Limpia datos sensibles para GitHub
npm run benchmark:python Benchmark básico de Python
npm run benchmark:js Benchmark básico de JavaScript
npm run benchmark:comparison Comparación completa con análisis

🔧 Scripts de Desarrollo

Script Descripción
npm run build Compilar TypeScript
npm run clean Limpiar archivos temporales
npm run setup Configuración inicial completa
npm run help Mostrar ayuda de comandos

🧮 Scripts de Testing

Script Descripción
npm run test:small Test con datasets pequeños
npm run test:large Test con datasets grandes
npm run benchmark:all Todos los benchmarks básicos

📁 Estructura del Proyecto

algorithm-HashMap-Map/
├── 📄 README.md                 # Esta documentación
├── 📦 package.json              # Configuración de Node.js
├── ⚙️  tsconfig.json            # Configuración de TypeScript
├──
├── 🐍 **Implementación Python**
│   ├── algorith.py              # Clase ChatbotFlowNavigator (Python)
│   ├── index.py                 # Benchmark básico Python
│   └── benchmark_advanced.py    # Benchmark avanzado Python
├──
├── 🚀 **Implementación TypeScript/JS**
│   ├── algorithm.ts             # Clase ChatbotFlowNavigator (TypeScript)
│   ├── index.ts                 # Benchmark básico TypeScript
│   └── benchmark_js.cjs         # Benchmark JavaScript
├──
├── 📊 **Datos y Generación**
│   ├── data/
│   │   ├── nodes.json           # Dataset original (11 nodos)
│   │   ├── edges.json           # Dataset original (14 edges)
│   │   ├── nodes_1000.json      # Dataset generado (1K nodos)
│   │   ├── edges_1000.json      # Dataset generado
│   │   ├── nodes_5000.json      # Dataset generado (5K nodos)
│   │   ├── edges_5000.json      # Dataset generado
│   │   ├── nodes_10000.json     # Dataset generado (10K nodos)
│   │   └── edges_10000.json     # Dataset generado
│   └── generate_data.py         # Generador de datasets
├──
├── 🔨 **Scripts de Benchmark**
│   ├── benchmark.sh             # Benchmark básico
│   ├── final_comparison.sh      # Comparación completa
│   └── results_*.txt            # Archivos de resultados
└──
└── 📁 **Compilados**
    └── dist/                    # Archivos TypeScript compilados

💻 Uso del API

🐍 Python

from algorith import ChatbotFlowNavigator
import json

# Cargar datos
with open("data/nodes.json", "r") as f:
    nodes = json.load(f)
with open("data/edges.json", "r") as f:
    edges = json.load(f)

# Inicializar navegador
navigator = ChatbotFlowNavigator(nodes, edges)

# Buscar siguiente nodo
criteria = {
    "button_type": "QUICK_REPLY",
    "target_contains": "node-GE2H6"
}
next_node = navigator.find_next_node("node-8E70X", criteria)

if next_node:
    print(f"Encontrado: {next_node['id']}")

🚀 TypeScript/JavaScript

import { ChatbotFlowNavigator } from "./algorithm.js";
import * as fs from "fs";

// Cargar datos
const nodes = JSON.parse(fs.readFileSync("data/nodes.json", "utf-8"));
const edges = JSON.parse(fs.readFileSync("data/edges.json", "utf-8"));

// Inicializar navegador
const navigator = new ChatbotFlowNavigator(nodes, edges);

// Buscar siguiente nodo
const criteria = {
  button_type: "QUICK_REPLY",
  target_contains: "node-GE2H6",
};
const nextNode = navigator.findNextNode("node-8E70X", criteria);

if (nextNode) {
  console.log(`Encontrado: ${nextNode.id}`);
}

🔧 Configuración

📝 Criterios de Búsqueda

const criteria = {
  button_type: "QUICK_REPLY", // Tipo de botón
  edge_type: "custom-edge", // Tipo de edge
  target_contains: "node-123", // Contenido en target
};

🏗️ Estructura de Nodos

{
  "id": "node-123",
  "data": {
    "type": "text_message",
    "label": "Mensaje de prueba",
    "message": "Hola, ¿cómo estás?",
    "buttons": [
      {
        "id": "btn-1",
        "text": "Bien",
        "type": "QUICK_REPLY"
      }
    ]
  }
}

🔗 Estructura de Edges

{
  "id": "edge-123",
  "source": "node-123",
  "target": "node-456",
  "sourceHandle": "source-node-123-QUICK_REPLY-0",
  "type": "custom-edge"
}

📈 Resultados de Performance

⚡ Velocidad de Búsqueda

  • JavaScript: ~0.1-0.4 μs por búsqueda
  • Python: ~0.3-0.7 μs por búsqueda
  • Ganador: JavaScript (2-3x más rápido)

💾 Eficiencia de Memoria

  • Python: ~2.3-2.4 KB por nodo
  • JavaScript: ~2.9-4.0 KB por nodo
  • Ganador: Python (20% más eficiente)

🏗️ Inicialización

  • Ambos lenguajes: ~10-12ms para 10,000 nodos
  • Complejidad: O(n) para inicialización
  • Resultado: Empate técnico

🎯 Recomendaciones

  • Usa Python si: Priorizas eficiencia de memoria y legibilidad
  • Usa JavaScript si: Necesitas máxima velocidad y integración web
  • Para aplicaciones reales: Ambos son prácticamente idénticos

🔒 Seguridad y Privacidad

📋 Datos Anonimizados

Este proyecto incluye datasets completamente anonimizados seguros para repositorios públicos:

  • Mensajes genéricos sin información empresarial específica
  • IDs aleatorios sin patrones identificables
  • Textos de ejemplo sin contenido sensible
  • Backup automático de datos originales

🛡️ Script de Limpieza

# Limpiar datos sensibles antes de subir a GitHub
npm run clean-sensitive

# Esto genera:
# ├── data/nodes.json          # ✅ Versión limpia para GitHub
# ├── data/edges.json          # ✅ Versión limpia para GitHub  
# └── data/backup/             # 🔒 Respaldo de datos originales
#     ├── nodes_original.json  # 🔒 Solo local, no en Git
#     └── edges_original.json  # 🔒 Solo local, no en Git

🔧 Recomendaciones de Seguridad

  1. Siempre ejecuta npm run clean-sensitive antes de hacer commit
  2. Revisa los archivos en data/ antes de subirlos
  3. Mantén los backups solo localmente
  4. No incluyas datos de producción en repositorios públicos

🤝 Contribuir

  1. Fork el proyecto
  2. Crea una rama para tu feature (git checkout -b feature/AmazingFeature)
  3. Commit tus cambios (git commit -m 'Add some AmazingFeature')
  4. Push a la rama (git push origin feature/AmazingFeature)
  5. Abre un Pull Request

📄 Licencia

Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.

👨‍💻 Autor

The-Spik3r

🙏 Agradecimientos

  • Algoritmo HashMap optimizado para navegación de grafos
  • Benchmarking exhaustivo Python vs JavaScript
  • Comunidad open source por las herramientas utilizadas

¡Si este proyecto te ayudó, dale una estrella!

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors