Mostrar los tags: arbol

Mostrando del 1 al 10 de 23 coincidencias
<<>>
Se ha buscado por el tag: arbol
Imágen de perfil

Árbol hash de Merkle.


Python

Publicado el 1 de Marzo del 2025 por Hilario (144 códigos)
471 visualizaciones desde el 1 de Marzo del 2025
Captura-de-pantalla-de-2025-03-01-12-25-07
Figure_1
----------------------------------------------------------------------------------


python3 Aula_28_Arbol_Merkle_Marz_25.py
---------------------------------------


Problema, para el Aula 28, a estudiar por partes en la primera semana de Marzo/25.
***********************************************************************************************
Vamos a plantear hoy un clásico problema, muy habitual en la criptomoneda Bitcoin, donde se aplica el arbol de Merkle, para optener el hash final de las transaciones pertenecientes a un bloke, este dato es uno de los fundamentales con el fin de poder proceder a su minado.
Plantearemos el problema resumido de la siguiente forma:
Queremos desarrollar un arbol de Merkle, en python, en sistema operativo Ubuntu. Necesitamos que las entradas del árbol sean de 8 opciones por consola.Las entradas deben admitir datos alfanumericos. Deberemos optener el hash final del resultado del arbol, de los datos introducidos. El lenguaje que vamos a aplicar es python3, bajo un istema operativo linux ubuntu, trabajando en consola.
**************************************************
Inicialmente vamos a definir, para entenderlo, que es un árbol de Merkle.
------------------------------------------------------------------------
Bien. Decimos que un árbol de Merkle es una estructura de datos en forma de árbol binario que se usa para verificar la integridad y autenticidad de los datos de manera eficiente.
Se utiliza en criptografía, sistemas de archivos distribuidos, y , como hemos indicado antes, en los blockchain para asegurar que la información no ha sido alterada.
El aula, deberá profundizar un poco más en esta definición, con el fin de comprender su significado.

***************************************************************************************************
Este programa fue desarrollado con Python V3.
Editado con Sublime Text.
Bajo una plataforma Linux,
Ubuntu 20.04.6 LTS.
Ejecución bajo este comado en consola:
python3 Aula_28_Arbol_Merkle_Marz_25.py
**********************************************

EXPLICACION DE LOS PASOS DEL EJERCICIO PHYTHON.
------------------------------------------------------------------------------

1️⃣ Importación de Módulos de módulos
--------------------------------------
necesario para el desarrollo de python.

import hashlib
import networkx as nx
import matplotlib.pyplot as plt

hashlib: Se usa para calcular los hashes SHA-256 de los datos.
networkx: Permite crear y visualizar grafos (en este caso, el árbol de Merkle).
matplotlib.pyplot: Se usa para graficar el árbol de Merkle.

2️⃣ Función para Calcular el Hash de un Dato
---------------------------------------------

def hash_data(data):
return hashlib.sha256(data.encode()).hexdigest()
Recibe un data (cadena de texto).
Usa SHA-256 para calcular su hash hexadecimal y lo devuelve.

3️⃣ Construcción del Árbol de Merkle
------------------------------------

def merkle_tree_hash(data_list):
if len(data_list) % 2 != 0:
data_list.append(data_list[-1]) # Duplicar el último si es impar
Si la cantidad de datos es impar, se duplica el último dato para asegurar que haya pares.

hashes = [hash_data(data) for data in data_list]
tree_levels = [hashes]
Se generan los hashes SHA-256 de cada dato y se almacenan en la primera capa del árbol.

while len(hashes) > 1:
temp_hashes = []
for i in range(0, len(hashes), 2):
combined_hash = hash_data(hashes[i] + hashes[i + 1])
temp_hashes.append(combined_hash)
hashes = temp_hashes
tree_levels.append(hashes)

Se combinan de dos en dos, se concatenan y se vuelven a hashear hasta llegar a un único hash raíz.
Ejemplo de construcción:


Entradas: A, B, C, D, E, F, G, H
Nivel 0: hash(A), hash(B), hash(C), hash(D), hash(E), hash(F), hash(G), hash(H)
Nivel 1: hash(hash(A)+hash(B)), hash(hash(C)+hash(D)), hash(hash(E)+hash(F)), hash(hash(G)+hash(H))
Nivel 2: hash(hash_AB + hash_CD), hash(hash_EF + hash_GH)
Nivel 3 (Raíz): hash(hash_ABCD + hash_EFGH)

4️⃣ Dibujar el Árbol de Merkle
--------------------------------

def plot_merkle_tree(tree_levels):
G = nx.DiGraph()
pos = {}
level_offset = 2.5
node_id = 0
Se crea un grafo dirigido G para representar el árbol.
pos almacena las posiciones de los nodos.
level_offset controla la separación vertical de los niveles.

for level, nodes in enumerate(tree_levels):
y_pos = -level * level_offset
x_step = 2 ** (len(tree_levels) - level - 1)
for i, node in enumerate(nodes):
label = node if level == len(tree_levels) - 1 else node[:6] + "..."
pos[node_id] = (i * x_step, y_pos)
G.add_node(node_id, label=label)
node_id += 1
Se añaden nodos con etiquetas:
Se muestran solo los primeros 6 caracteres seguidos de ..., excepto en el hash final.

node_id = 0
for level in range(len(tree_levels) - 1):
for i in range(0, len(tree_levels[level]), 2):
parent_id = node_id + len(tree_levels[level])
G.add_edge(node_id, parent_id)
G.add_edge(node_id + 1, parent_id)
node_id += 2
Se añaden las conexiones entre nodos padre e hijos.

labels = nx.get_node_attributes(G, 'label')
plt.figure(figsize=(15, 10))
nx.draw(G, pos, with_labels=True, labels=labels, node_size=5000, node_color='lightblue', font_size=8, font_weight='bold', edge_color='gray')
plt.title("Árbol de Merkle", fontsize=14)
plt.show()
Se genera la gráfica con matplotlib, usando networkx para dibujar el árbol.

5️⃣ Función Principal
----------------------

def main():
print("Introduce 8 valores alfanuméricos:")
data_list = [input(f"Dato {i+1}: ") for i in range(8)]
Se piden 8 entradas de datos por consola.

tree_levels = merkle_tree_hash(data_list)
root_hash = tree_levels[-1][0]
print("\nHash final del árbol de Merkle:", root_hash)
Se construye el árbol de Merkle.
Se imprime el hash raíz (Merkle Root).

plot_merkle_tree(tree_levels)
Se dibuja la gráfica del árbol.

6️⃣ Ejecución del Programa
----------------------------

if __name__ == "__main__":
main()
Se ejecuta main() solo si el script se ejecuta directamente.
Imágen de perfil

Clasificacion de Datos Arboles de Decision


Python

Publicado el 17 de Octubre del 2023 por Hilario (144 códigos)
621 visualizaciones desde el 17 de Octubre del 2023
CuadernoAula-B-28-OCT-18.py
-----------------------------------------------------------------------------
La clasificación de datos mediante árboles de decisiones es un método de aprendizaje automático que se utiliza para categorizar o etiquetar datos en diferentes clases o categorías. Es una técnica de modelado predictivo que se basa en la creación de un "árbol" de decisiones, donde cada nodo interno del árbol representa una pregunta o una prueba sobre una característica específica de los datos, y las ramas que salen de ese nodo conducen a diferentes resultados o decisiones basadas en el valor de esa característica. Los nodos hoja del árbol representan las categorías o clases en las que se divide el conjunto de datos.

El proceso de clasificación a través de árboles de decisión implica:

Construcción del árbol: Se inicia con un nodo raíz que representa todo el conjunto de datos. Luego, se selecciona una característica y un umbral que se utilizará para dividir los datos en dos subconjuntos. Este proceso se repite recursivamente en cada subconjunto hasta que se alcanza un criterio de parada, como un tamaño máximo de profundidad del árbol, una cantidad mínima de muestras en los nodos hoja, o una impureza mínima.

Selección de características: En cada paso de división, se elige la característica que mejor separa los datos, lo que se logra al minimizar alguna métrica de impureza, como el índice de Gini o la entropía. La característica y el umbral que minimizan la impureza se utilizan para dividir los datos en dos ramas.

Predicción: Una vez construido el árbol, se utiliza para hacer predicciones sobre datos nuevos. Los datos nuevos se introducen en el árbol, siguiendo las ramas que corresponden a las características de esos datos, hasta llegar a un nodo hoja que representa la clase predicha.

Los árboles de decisión son atractivos porque son interpretables y fáciles de visualizar. Sin embargo, pueden ser propensos al sobreajuste (overfitting), especialmente si se construyen árboles muy profundos. Para abordar este problema, se pueden utilizar técnicas como la poda (pruning) o el uso de bosques aleatorios (random forests) que combinan múltiples árboles para mejorar la precisión y reducir el sobreajuste.

En resumen, la clasificación de datos mediante árboles de decisión es una técnica poderosa y ampliamente utilizada en aprendizaje automático para tareas de clasificación, donde el objetivo es predecir la categoría o clase a la que pertenecen los datos de entrada en función de sus características.
Imágen de perfil

Arbol de expresiones


Java

Publicado el 3 de Septiembre del 2022 por Rafael Angel (15 códigos)
4.810 visualizaciones desde el 3 de Septiembre del 2022
Ejemplo claro, bien programado de un arbol de expreciones.
Datos de ejemplo:

Datos de entrada: 22/24+467-5****

Datos de salida en Postorder:
Expresion postfix mostrada en PostOrder
22/24+467-5****

Datos de salida en InOrder:
Expresion Infix mostrada en InOrder
((2/2)*((2+4)*(4*((6-7)*5))))

Muy claro el resultado.

Las delcaraciones estan en palabras completas, nada de abreviaturas.
Finalmente se hace uso del stack de java.
Imágen de perfil

Arbol binario actualizado 2022


Java

Publicado el 3 de Septiembre del 2022 por Rafael Angel (15 códigos)
973 visualizaciones desde el 3 de Septiembre del 2022
Demostracion facil de entender de un arbol de nodos, asi mismo tambien se incluye un ejemplo de cada uno de los siguientes enumerados: fila, cola, pila, stack, fila doblemente enlazada.
Es un codigo muy limpio y ordenado, las declaraciones estan en palabras completas, noda de abreviaturas.
Imágen de perfil

Arbol Binario 2


Java

Publicado el 12 de Octubre del 2020 por Daniel (194 códigos)
1.035 visualizaciones desde el 12 de Octubre del 2020
Arbol Bianario en Java con las opciones de:
1.Insertar nodos
2.Recorridos:
Preorden
Simetrico
PosOrden
3.Busqueda
4.Borrado
Imágen de perfil

Arbol Binario


Java

Publicado el 12 de Octubre del 2020 por Daniel (194 códigos)
1.387 visualizaciones desde el 12 de Octubre del 2020
Arbol Bianario en Java con las opciones de:
1.Insertar nodos
2.Recorridos:
Preorden
Simetrico
PostOrden
Imágen de perfil

Uso de una matriz escalonada


Visual Basic.NET

Publicado el 22 de Julio del 2020 por Rafael Angel (81 códigos)
1.883 visualizaciones desde el 22 de Julio del 2020
Hola con este primer código en Visual Basic.Net 2017, quiero mostrar cómo usar una matriz escalonada.
Este ejemplo también está en MSDB online, pero tanto los códigos y los comentarios estan en ingles.
Yo con mis bases del ingles lo traduje a español.
Además tiene la referencia de donde lo tome, la misma la pondre aqui.
Obtenido de https://docs.microsoft.com/es-es/dotnet/visual-basic/programming-guide/language-features/arrays/
.
.
.
Yo también aprendí realizandolo paso a paso.
O mejor dicho me actualice, ya que vb.net no es muy diferente de vb6, solo tiene un montón de cosas nuevas, muy versátiles.
Las cuales después de usarlas algunas semanas ya no se quería regresar a vb6.
.
.
.
Así mismo, yo me vi forzado a pasarme a vb,net debido a un trabajo empresarial que me salio.
Estoy diseñando un gestor de facturas digitales en modo proyecto webform.
Yo me enfrente a esta tecnología apenas teniendo algunas nociones. En especial la tecnología del WebForm que es todo un mundo.
Pero por razones de trabajo se debe hacer.
.
.
Así que en adelante de vez en cuando publicaré códigos de VB.NET.
No obstante, en la mayoría de publicaciones vendrán comentarios demostrando el código en vb6 y luego como se ve en vb.net.
sin imagen de perfil

tree


Dev - C++

Publicado el 28 de Abril del 2020 por Manuel Isaac (4 códigos)
2.094 visualizaciones desde el 28 de Abril del 2020
Tengo una versión de Árbol Binario de Búsqueda, extraída de un documento.
Anterior123Siguiente