Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

1ER_REP_02_LESG Metodos de ordenamiento, Guías, Proyectos, Investigaciones de Inteligencia Artificial

Practica de métodos de ordenamiento en Java

Tipo: Guías, Proyectos, Investigaciones

2019/2020

Subido el 15/10/2020

luis-eduardo-sanchez-gonzalez
luis-eduardo-sanchez-gonzalez 🇲🇽

1 documento

1 / 22

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Materia:
INTELIGENICIA ARTIFICIAL
Actividad:
Práctica 1.1. Algoritmos de
Ordenamiento
Nombre:
Luis Eduardo Sánchez González
Registro:
17110280
Fecha de elaboración:
18/Septiembre/2020
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16

Vista previa parcial del texto

¡Descarga 1ER_REP_02_LESG Metodos de ordenamiento y más Guías, Proyectos, Investigaciones en PDF de Inteligencia Artificial solo en Docsity!

Materia: INTELIGENICIA ARTIFICIAL

Actividad: Práctica 1.1. Algoritmos de

Ordenamiento

Nombre: Luis Eduardo Sánchez González

Registro: 17110280

Fecha de elaboración: 18 /Septiembre/

Índice

  • Introducción
  • Desarrollo
  • Código fuente
  • Referencias bibliográficas.

Desarrollo

Para esta practica se decidió utilizar los siguientes métodos de ordenamiento:

  • Ordenamiento de burbuja.

▪ La Ordenación de burbuja (Bubble Sort en inglés) es un sencillo algoritmo de

ordenamiento. Funciona revisando cada elemento de la lista que va a ser

ordenada con el siguiente, intercambiándolos de posición si están en el orden

equivocado. Es necesario revisar varias veces toda la lista hasta que no se

necesiten más intercambios, lo cual significa que la lista está ordenada. Este

algoritmo obtiene su nombre de la forma con la que suben por la lista los

elementos durante los intercambios, como si fueran pequeñas "burbujas".

También es conocido como el método del intercambio directo. Dado que solo

usa comparaciones para operar elementos, se lo considera un algoritmo de

comparación, siendo uno de los más sencillos de implementar.

  • Ordenamiento por inserción

▪ El ordenamiento por inserción es una manera muy natural de ordenar para un

ser humano, y puede usarse fácilmente para ordenar un mazo de cartas

numeradas en forma arbitraria. La idea de este algoritmo de ordenación

consiste en ir insertando un elemento de la lista o un arreglo en la parte

ordenada de la misma, asumiendo que el primer elemento es la parte

ordenada, el algoritmo ira comparando un elemento de la parte desordenada

de la lista con los elementos de la parte ordenada, insertando el elemento en

la posición correcta dentro de la parte ordenada, y así sucesivamente hasta

obtener la lista ordenada.

  • Algoritmo QuickSort

▪ Este algoritmo se basa en el principio de divide y conquistarás. Resulta más

fácil ordenar listas pequeñas que una grande, con lo cual irá descomponiendo

la lista en dos partes y ordenando esas partes. Para esto utiliza la

recursividad.

o Dada una lista, elegir uno de sus elementos, que llamamos pivot

o Dividir la lista en dos sublistas:

❖ una con los elementos "menores"

❖ otra con los elementos "mayores"

o Ordenar recursívamente ambas sublistas

Armar la lista resultado como: menoresOrdenados + pivot + mayoresOrdenados.

Vamos a ver más adelante que la elección del pivot y el orden con el que venga

ya de entrada la línea podrá afectar la eficiencia del algoritmo. En principio el

algoritmo no especifica cómo elegir el pivot.

Codificación de la interfaz gráfica:

package algoritmos.de.ordenamiento ; _/**

  • @author SanchezGonzalez */_ public class Interfaz extends javax.swing.JFrame { public Interfaz() { initComponents(); } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jSeparator1 = new javax.swing.JSeparator(); jpnlPrincipal = new javax.swing.JPanel(); jlblNombre = new javax.swing.JLabel(); jlblElementos = new javax.swing.JLabel(); jlblMcaso = new javax.swing.JLabel(); jlblMdcaso = new javax.swing.JLabel(); jlblPcaso = new javax.swing.JLabel(); jsepInt = new javax.swing.JSeparator(); jbtnMil = new javax.swing.JButton(); jlblA1 = new javax.swing.JLabel(); jlblA2 = new javax.swing.JLabel(); jlblA3 = new javax.swing.JLabel(); jsepInt1 = new javax.swing.JSeparator(); jbtnDiezmil = new javax.swing.JButton(); jlblB1 = new javax.swing.JLabel(); jlblB2 = new javax.swing.JLabel(); jlblB3 = new javax.swing.JLabel(); jsepInt2 = new javax.swing.JSeparator(); jbtnCienmil = new javax.swing.JButton(); jlblC1 = new javax.swing.JLabel(); jlblC2 = new javax.swing.JLabel(); jlblC3 = new javax.swing.JLabel(); jsepInt3 = new javax.swing.JSeparator(); jbtnUnmillon = new javax.swing.JButton(); jlblD1 = new javax.swing.JLabel(); jlblD2 = new javax.swing.JLabel(); jlblD3 = new javax.swing.JLabel(); jsepInt4 = new javax.swing.JSeparator(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jlblNombre.setText("Algoritmos De Ordenamiento"); jlblElementos.setText("Numero de elementos");

jlblMcaso.setText("Mejor Caso"); jlblMdcaso.setText("Caso Medio"); jlblPcaso.setText("Peor Caso"); jbtnMil.setText("1,000"); jbtnMil.addActionListener( new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jbtnMilActionPerformed(evt); } }); jlblA1.setText("A1"); jlblA2.setText("A2"); jlblA3.setText("A3"); jbtnDiezmil.setText("10,000"); jbtnDiezmil.addActionListener( new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jbtnDiezmilActionPerformed(evt); } }); jlblB1.setText("B1"); jlblB2.setText("B2"); jlblB3.setText("B3"); jbtnCienmil.setText("100,000"); jbtnCienmil.addActionListener( new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jbtnCienmilActionPerformed(evt); } }); jlblC1.setText("C1"); jlblC2.setText("C2"); jlblC3.setText("C3"); jbtnUnmillon.setText("1,000,000");

.addGroup(jpnlPrincipalLayout.createParallelGroup(javax.swing.GroupLa yout.Alignment.LEADING) .addGroup(jpnlPrincipalLayout.createSequentialGroup() .addComponent(jbtnCienmil) .addGap(128, 128, 128) .addComponent(jlblC1) .addGap(159, 159, 159) .addComponent(jlblC2) .addGap(130, 130, 130) .addComponent(jlblC3)) .addGroup(jpnlPrincipalLayout.createSequentialGroup() .addComponent(jbtnDiezmil) .addGap(134, 134, 134) .addComponent(jlblB1) .addGap(162, 162, 162) .addComponent(jlblB2) .addGap(127, 127, 127) .addComponent(jlblB3)) .addGroup(jpnlPrincipalLayout.createSequentialGroup() .addComponent(jbtnMil) .addGap(141, 141, 141) .addComponent(jlblA1) .addGap(160, 160, 160) .addComponent(jlblA2) .addGap(124, 124, 124) .addComponent(jlblA3)) .addGroup(jpnlPrincipalLayout.createSequentialGroup() .addComponent(jlblElementos) .addGap(92, 92, 92) .addComponent(jlblMcaso) .addGap(110, 110, 110) .addComponent(jlblMdcaso) .addGap(94, 94, 94) .addComponent(jlblPcaso)) .addGroup(jpnlPrincipalLayout.createSequentialGroup() .addComponent(jbtnUnmillon) .addGap(116, 116, 116) .addComponent(jlblD1) .addGap(160, 160, 160) .addComponent(jlblD2) .addGap(132, 132, 132) .addComponent(jlblD3))) .addContainerGap(156, Short.MAX_VALUE)))) ); jpnlPrincipalLayout.setVerticalGroup(

jpnlPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Align ment.LEADING) .addGroup(jpnlPrincipalLayout.createSequentialGroup() .addGap(23, 23, 23) .addComponent(jlblNombre) .addGap(7, 7, 7) .addGroup(jpnlPrincipalLayout.createParallelGroup(javax.swing.GroupLa yout.Alignment.BASELINE) .addComponent(jlblElementos) .addComponent(jlblMcaso) .addComponent(jlblMdcaso) .addComponent(jlblPcaso)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED ) .addComponent(jsepInt, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jpnlPrincipalLayout.createParallelGroup(javax.swing.GroupLa yout.Alignment.BASELINE) .addComponent(jbtnMil) .addComponent(jlblA1) .addComponent(jlblA2) .addComponent(jlblA3)) .addGap(11, 11, 11) .addComponent(jsepInt1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(11, 11, 11) .addGroup(jpnlPrincipalLayout.createParallelGroup(javax.swing.GroupLa yout.Alignment.BASELINE) .addComponent(jbtnDiezmil) .addComponent(jlblB1) .addComponent(jlblB2) .addComponent(jlblB3)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jsepInt2, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jpnlPrincipalLayout.createParallelGroup(javax.swing.GroupLa yout.Alignment.BASELINE) .addComponent(jbtnCienmil)

pack(); } // </editor-fold> private void jbtnMilActionPerformed(java.awt.event.ActionEvent evt) { int arreglo[]= new int[1000]; double tiempob,tiempoi,tiempoq; for (int r=0;r<arreglo.length;r++){ arreglo[r]=(int)(Math.random()*1001+1); } Metodo_burbuja b = new Metodo_burbuja(); b.Burbuja(arreglo); tiempob=b.diferencia; Metodo_insercion in = new Metodo_insercion(); in.Insercion(arreglo); tiempoi=in.diferencia; Metodo_quicksort q = new Metodo_quicksort(); q.Quicksort(arreglo); tiempoq=q.diferencia; String tb = String.valueOf(String.format("%.2f",tiempob)); String.format("%.2f",tiempoi); String ti = String.valueOf(String.format("%.2f",tiempoi)); String.format("%.2f",tiempoq); String tq = String.valueOf(String.format("%.2f",tiempoq)); if (tiempob>tiempoi && tiempoi>tiempoq){ jlblA1.setText("Quicksort: "+tq+" s."); jlblA2.setText("Insercion: "+ti+" s."); jlblA3.setText("Burbuja: "+tb+" s."); } else if (tiempob>tiempoq && tiempoq>tiempoi){ jlblA1.setText("Insercion: "+ti+" s."); jlblA2.setText("Quicksort: "+tq+" s."); jlblA3.setText("Burbuja: "+tb+" s."); } else if (tiempoi>tiempob && tiempob>tiempoq){ jlblA1.setText("Quicksort: "+tq+" s."); jlblA2.setText("Burbuja: "+tb+" s."); jlblA3.setText("Insercion: "+ti+" s."); } else if (tiempoi>tiempoq && tiempoq>tiempob){ jlblA1.setText("Burbuja: "+tb+" s."); jlblA2.setText("Quicksort: "+tq+" s."); jlblA3.setText("Insercion: "+ti+" s."); } else if (tiempoq>tiempob && tiempob>tiempoi){ jlblA1.setText("Insercion: "+ti+" s."); jlblA2.setText("Burbuja: "+tb+" s."); jlblA3.setText("Quicksort: "+tq+" s."); } else if (tiempoq>tiempoi && tiempoi>tiempob){ jlblA1.setText("Burbuja: "+tb+" s."); jlblA2.setText("Insercion: "+ti+" s.");

jlblA3.setText("Quicksort: "+tq+" s."); } } private void jbtnDiezmilActionPerformed(java.awt.event.ActionEvent evt) { int arreglo[]= new int[10000]; double tiempob,tiempoi,tiempoq; for (int r=0;r<arreglo.length;r++){ arreglo[r]=(int)(Math.random()*1001+1); } Metodo_burbuja b = new Metodo_burbuja(); b.Burbuja(arreglo); tiempob=b.diferencia; Metodo_insercion in = new Metodo_insercion(); in.Insercion(arreglo); tiempoi=in.diferencia; Metodo_quicksort q = new Metodo_quicksort(); q.Quicksort(arreglo); tiempoq=q.diferencia; String tb = String.valueOf(String.format("%.2f",tiempob)); String.format("%.2f",tiempoi); String ti = String.valueOf(String.format("%.2f",tiempoi)); String.format("%.2f",tiempoq); String tq = String.valueOf(String.format("%.2f",tiempoq)); if (tiempob>tiempoi && tiempoi>tiempoq){ jlblB1.setText("Quicksort: "+tq+" s."); jlblB2.setText("Insercion: "+ti+" s."); jlblB3.setText("Burbuja: "+tb+" s."); } else if (tiempob>tiempoq && tiempoq>tiempoi){ jlblB1.setText("Insercion: "+ti+" s."); jlblB2.setText("Quicksort: "+tq+" s."); jlblB3.setText("Burbuja: "+tb+" s."); } else if (tiempoi>tiempob && tiempob>tiempoq){ jlblB1.setText("Quicksort: "+tq+" s."); jlblB2.setText("Burbuja: "+tb+" s."); jlblB3.setText("Insercion: "+ti+" s."); } else if (tiempoi>tiempoq && tiempoq>tiempob){ jlblB1.setText("Burbuja: "+tb+" s."); jlblB2.setText("Quicksort: "+tq+" s."); jlblB3.setText("Insercion: "+ti+" s."); } else if (tiempoq>tiempob && tiempob>tiempoi){ jlblB1.setText("Insercion: "+ti+" s."); jlblB2.setText("Burbuja: "+tb+" s."); jlblB3.setText("Quicksort: "+tq+" s."); } else if (tiempoq>tiempoi && tiempoi>tiempob){ jlblB1.setText("Burbuja: "+tb+" s."); jlblB2.setText("Insercion: "+ti+" s.");

jlblC3.setText("Quicksort: "+tq+" s."); } } private void jbtnUnmillonActionPerformed(java.awt.event.ActionEvent evt) { int arreglo[]= new int[1000000]; double tiempob,tiempoi,tiempoq; for (int r=0;r<arreglo.length;r++){ arreglo[r]=(int)(Math.random()*1001+1); } Metodo_burbuja b = new Metodo_burbuja(); b.Burbuja(arreglo); tiempob=b.diferencia; Metodo_insercion in = new Metodo_insercion(); in.Insercion(arreglo); tiempoi=in.diferencia; Metodo_quicksort q = new Metodo_quicksort(); q.Quicksort(arreglo); tiempoq=q.diferencia; String tb = String.valueOf(String.format("%.2f",tiempob)); String.format("%.2f",tiempoi); String ti = String.valueOf(String.format("%.2f",tiempoi)); String.format("%.2f",tiempoq); String tq = String.valueOf(String.format("%.2f",tiempoq)); if (tiempob>tiempoi && tiempoi>tiempoq){ jlblD1.setText("Quicksort: "+tq+" s."); jlblD2.setText("Insercion: "+ti+" s."); jlblD3.setText("Burbuja: "+tb+" s."); } else if (tiempob>tiempoq && tiempoq>tiempoi){ jlblD1.setText("Insercion: "+ti+" s."); jlblD2.setText("Quicksort: "+tq+" s."); jlblD3.setText("Burbuja: "+tb+" s."); } else if (tiempoi>tiempob && tiempob>tiempoq){ jlblD1.setText("Quicksort: "+tq+" s."); jlblD2.setText("Burbuja: "+tb+" s."); jlblD3.setText("Insercion: "+ti+" s."); } else if (tiempoi>tiempoq && tiempoq>tiempob){ jlblD1.setText("Burbuja: "+tb+" s."); jlblD2.setText("Quicksort: "+tq+" s."); jlblD3.setText("Insercion: "+ti+" s."); } else if (tiempoq>tiempob && tiempob>tiempoi){ jlblD1.setText("Insercion: "+ti+" s."); jlblD2.setText("Burbuja: "+tb+" s."); jlblD3.setText("Quicksort: "+tq+" s."); } else if (tiempoq>tiempoi && tiempoi>tiempob){ jlblD1.setText("Burbuja: "+tb+" s."); jlblD2.setText("Insercion: "+ti+" s.");

jlblD3.setText("Quicksort: "+tq+" s."); } } public static void main(String args[]) { _/* Set the Nimbus look and feel / //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> / If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.

  • For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.h tml /_ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break ; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(Interfaz.class.getName()).log(java .util.logging.Level.SEVERE, null , ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(Interfaz.class.getName()).log(java .util.logging.Level.SEVERE, null , ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(Interfaz.class.getName()).log(java .util.logging.Level.SEVERE, null , ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(Interfaz.class.getName()).log(java .util.logging.Level.SEVERE, null , ex); } _//</editor-fold> / Create and display the form */_ java.awt.EventQueue.invokeLater( new Runnable() { public void run() { new Interfaz().setVisible( true ); } }); } // Variables declaration - do not modify private javax.swing.JSeparator jSeparator1;

for (int i=1;i<array.length;i++){ if (array[i]<array[i-1]){ aux=array[i]; array[i]=array[i-1]; array[i-1]=aux; cambios= true ; } } if (cambios== false ){ break ; } } } /**Funcion que calcula el tiempo con System.nonoTime */ long fin = System.nanoTime(); double diferencia=(double)(fin-inicio) * (1.0 * Math.pow(Math.E,- 9)); }

Codificación del método de inserción con el método de medición de tiempo.

_* To change this license header, choose License Headers in Project Properties.

  • To change this template file, choose Tools | Templates
  • and open the template in the editor. /_ package algoritmos.de.ordenamiento ; _/*
  • @author SanchezGonzalez /_ public class Metodo_insercion { _/Funcion que calcula el tiempo con System.nonoTime /_ long inicio = System.nanoTime(); public void Insercion(int[] array) { int aux; int cont1,cont2; for (cont1=1;cont1<array.length;cont1++){ aux=array[cont1]; for (cont2=cont1-1;cont2 >= 0 && array[cont2]>aux;cont2-- ){ array[cont2+1]=array[cont2]; array[cont2]=aux; } } } _/Funcion que calcula el tiempo con System.nonoTime */_ long fin = System.nanoTime(); double diferencia=(double)(fin-inicio) * (1.0 * Math.pow(Math.E,- 9)); }

Codificación del método de quicksort con el método de medición de tiempo.

_* To change this license header, choose License Headers in Project Properties.

  • To change this template file, choose Tools | Templates
  • and open the template in the editor. /_ package algoritmos.de.ordenamiento ; _/*
  • @author SanchezGonzalez /_ public class Metodo_quicksort { _/*Funcion que calcula el tiempo con System.nonoTime */_ long inicio = System.nanoTime();