domingo, 27 de diciembre de 2015

Esquemas Algorítmicos y Problemas

¿Qué algoritmo debemos emplear para la resolución de un problema?

Atendiendo a la naturaleza del problema las posibilidades son muchas y muy variadas, de echo casi todos los problemas se pueden resolver con cualquier esquema algorítmico pero no todos son igual de eficientes a la hora de resolverlo, por eso vamos a hacer una pequeña guía de los esquemas algorítmicos básicos y los problemas que se pueden resolver con ellos.

Los esquemas algorítmicos más comunes son los siguientes:







Y con cada uno de ellos podemos resolver infinidad de problemas pero los más comunes a resolver con cada tipo son los siguientes:


Algoritmos Voraces: 

-Encontrar árboles de recubrimiento mínimo (algoritmo de Prim y algoritmo de Kruskal)
-Encontrar camino de coste mínimo (algoritmo de Dijkstra)
-Problemas de minimización de tiempo en un sistema
-Planificar con plazos
-Almacenamiento óptimo en soportes secuenciales
-El típico problema de la mochila con objetos fraccionables
-Mantener la conectividad en una red, en un sistema, etc
-Problema de mensajería
-Robot desplazándose por un circuito
-Sistema de asistencia


Divide y Vencerás:

-Ordenación por fusión (Mergesort)
-Problema del puzzle Tromino
-Ordenación rápida (Quicksort)
-Cálculo del elemento mayoritario de un vector
-Organizar liga de equipos
-Calcular Skyline de una ciudad


Programación Dinámica:

-Cálculo de coeficientes binomiales
-Problemas de devolución de cambio
-Viaje por el río
-La mochila
-Multiplicación Asociativa de Matrices
-Calcular el camino de coste mínimo entre nodos en un grafo dirigido
-Problemas de distancia de edición


Vuelta Atrás:

-Coloreado de grafos
-Ciclos Hamiltonianos
-Subconjuntos de una suma dada
-Reparto equitativo
-Robot en busca de un tornillo
-Asignación de cursos en una escuela


Ramificación y Poda:

-Asignación de tareas
-Viaje de comercio
-Selección de tareas
-Distancia de edición


martes, 15 de diciembre de 2015

Vuelve Dragon Valley

Hoy mismo se ha lanzado el DLC Legacy Operations para Battlefield 4 que incluye el mítico escenario Dragon Valley

Para aquellas personas que no sepan que es Dragon Valley les puedo decir que es un mapa, un escenario del juego Battlefield donde se desarrolla toda la "acción" del juego.

Todos aquellos usuarios de Battlefield 4 podrán conseguirlo gratuitamente y podrán

miércoles, 9 de diciembre de 2015

Tabla Hash

Una tabla hash es una estructura de datos muy eficiente para realizar búsquedas.

Las tablas hash también son conocidas cómo hash map, mapa hash, tabla de dispersión, etc y su principal característica es que nos permiten almacenar datos del tipo llave valor. Es una estructura de datos muy eficiente a la hora de realizar búsquedas.

Un ejemplo de tabla hash sería un listado con el nombre y número de teléfono de muchas personas, el funcionamiento es muy sencillo. Toda tabla hash para poder almacenar los datos que le demos tiene una función hash, esa función se encarga de traducir la llave a una posición, número entero que se corresponde con el índice de la tabla donde almacenaremos el valor. Paso por paso (en el ejemplo de agenda de teléfonos) sería así:

-Introducimos el nombre (que sería la llave)
-La función hash de acuerdo a las funciones y algoritmos que le hayamos puesto previamente calculará que posición en la tabla debe ocupar el valor de esa llave, es decir, traduce el nombre a un número que será la posición donde almacenaremos el número
-Introducir el número de teléfono (que sería el valor)

Una vez hechos estos pasos ya tendremos el par llave valor almacenado en nuestra tabla y para poder recuperarlo bastaría con introducir la llave o clave para conseguir el valor de la siguiente forma:

-Introducimos la llave (que en el ejemplo sería el nombre)
-La función hash, al igual que a la hora de introducir el par llave valor, calcula que posición en la tabla le corresponde a esa llave y así obtiene el valor de una forma muy eficiente

Un ejemplo gráfico sería el siguiente:

ejemplo de funcionamiento de una tabla hash
Funcionamiento de una tabla hash


Este tipo de tablas resulta muy eficiente para realizar búsquedas si tenemos muchos elementos almacenados ya que no tenemos que recorrer la tabla completa para realizar la búsqueda sino que nos bastaría con conocer la clave para poder encontrar el valor, ahorrándonos así el tiempo que se necesita en recorrer toda la tabla.

Cualquier duda o cosa que queráis preguntar ponerla por los comentarios, da igual si es algo bueno, malo, un chiste o lo que sea, vosotr@s ponerlo jajaj


domingo, 6 de diciembre de 2015

Baterías de grafeno

Las baterías de grafeno probablemente serán la mayor revolución tecnológica de los últimos años.

Todavía están en desarrollo, aunque muy pronto empezaremos a verlas en nuestra vida diaria. Estamos hablando de baterías que en estos primeros años aumentarían entre 5-10 veces la capacidad de las baterías actuales y que reducirían el tiempo de carga entre 15-20 veces, también dicen que los ciclos de carga que soportaran serán 5 veces mayor que las actuales. A medida que esta tecnología avance esas cifras serán incluso mejores por lo que el uso de estas baterías marcará un antes y un después en infinidad de dispositivos que usamos en nuestra vida diaria.

¿Que supone este tipo de baterías para el usuario normal? Pues supone casi un cambio de vida (a mejor) por ejemplo, nuestros smartphones quedarán cargados completamente en apenas 5 o 10 minutos y la batería les durará, sin problemas, una semana o más y no cómo ahora que hay que estar cargándolos cada día y algunos incluso varias veces al día, además al soportar muchos más ciclos de carga que las anteriores baterías, la batería de grafeno nos durará mucho más que las actuales que suelen durar un año y poco más. En general todos los dispositivos que lleven batería se verán afectados por la inclusión de está gran tecnológica mejorando así sus tiempos de carga de manera asombrosa así cómo su duración, estaríamos hablando de portátiles, tablets, smartwatchs, etc.

Otro de los grandes cambios que puede introducir las baterías de grafeno a nuestra vida diaría y quizás el más importante es su inclusión en los automóviles pues con estas baterías podríamos estar hablando ya de coches con autonomías de entre 1000 y 2000km, con unos tiempos de carga mínimos y un mantenimiento casi nulo. Esto supondría poder empezar a eliminar la dependencia del uso de combustibles fósiles y empezar a usar vehículos totalmente respetuosos con el medio ambiente, que es muy necesario conforme están los niveles de contaminación en todo el planeta.

Cómo veis estas baterías pueden mejorarnos la vida de manera muy significativa, así que habrá que estar atentos a 2016 donde empezaremos a verlas en algunos dispositivos, aquí sólo hemos hablado un poquito de cómo nos afectaría el uso de estas baterías en nuestros automóviles o smartphones, pero este tipo de baterías y el material del que están hechas (grafeno) se puede usar en muchos campos de la vida por no decir en todos y en poco tiempo empezaremos a ver cómo se usa en medicina, construcción, materiales, aeronáutica, etc


miércoles, 2 de diciembre de 2015

JComboBox en Java

Un JComboBox es una caja de opciones que podemos añadir a nuestras aplicaciones para que el usuario final pueda elegir lo que mas le guste o interese.

En una pequeña introducción a JComboBox vamos a crear una ventana y dentro vamos a poner el JComboBox. 

El JComboBox de este primer post es bastante sencillo, sin ninguna opción ni nada para que veáis cómo es, en post sucesivos iremos viendo lo fácil que es añadirle más opciones, que cada opción haga lo que queramos, etc.

Os dejo primero una captura de pantalla para que veáis que aspecto tiene y seguidamente os dejo el código fuente para que lo uséis y podáis experimentar y así aprender y asimilar mejor cómo se usa JComboBox. En la imagen el JComboBox está desplegado, he hecho clic en la flecha y se ha abierto, no tiene ninguna opción ni nada porque es un JComboBox básico.

JComboBox en Java
JComboBox en una ventana en Java

Ahora os dejo el código fuente listo para que lo copiéis y podáis usar sin ningún problema:



import javax.swing.UIManager.LookAndFeelInfo;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import javax.swing.border.Border;
import javax.swing.*;


public class GUI_project extends JFrame {


private JComboBox combobox1;

//Constructor 
public GUI_project(){

this.setTitle("JuegoSoftware.com");
this.setSize(500,400);

//pane with null layout
JPanel contentPane = new JPanel(null);
contentPane.setPreferredSize(new Dimension(500,400));
contentPane.setBackground(new Color(192,192,192));


combobox1 = new JComboBox();
combobox1.setBounds(79,81,120,40);
combobox1.setBackground(new Color(214,217,223));
combobox1.setForeground(new Color(0,0,0));
combobox1.setEnabled(true);
combobox1.setFont(new Font("sansserif",0,12));
combobox1.setVisible(true);

//adding components to contentPane panel
contentPane.add(combobox1);

//adding panel to JFrame and seting of window position and close operation
this.add(contentPane);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.pack();
this.setVisible(true);
}

public static void main(String[] args){
System.setProperty("swing.defaultlaf", "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new GUI_project();
}
});
}

}



Cualquier cosa podéis ponerla en los comentarios (buena, mala, buenísima, malísima, etc jajajaj)