Autor
|
Tema: Agrupamiento de Nodos Vecino en un Arreglo (Mineria de Datos) (Leído 8,254 veces)
|
cyberserver
Desconectado
Mensajes: 162
Lo que una mente crea, otra lo destruye
|
Para aquellos que les interesa agrupar nodos, ya sea para agrupar patrones individuales en uno solo si se cumple la condicion de que los nodos sean vecinos. Ejemplo muy sencillo pero muy practico: NOTA: Este ejemplo Remplaza los valores Agrupados con un Valor que uno especifica en la llamada al constructor. AgrupamientoVecinos objeto=new AgrupamientoVecinos(arreglo,"1","8");
Y el codigo es el siguiente: import javax.swing.*; public class Agrupamiento { public static void main (String[] args ) { for(int yx=0;yx<=9;yx++){ for(int yy=0;yy<=9;yy++){ arreglo[yx][yy]="0"; } } arreglo[3][2]="1"; arreglo[3][3]="1"; arreglo[4][2]="1"; arreglo[2][4]="1"; arreglo[4][4]="1"; arreglo[6][6]="1"; arreglo[6][7]="1"; AgrupamientoVecinos objeto=new AgrupamientoVecinos(arreglo,"1","8"); for(int yx=0;yx<=9;yx++){ for(int yy=0;yy<=9;yy++){ if(arreglo[yx][yy]=="1"){ objeto.BuscarVecino(yx,yy); } } } JOptionPane. showMessageDialog(null, "Termino de Buscar"); for(int yx=0;yx<=9;yx++){ for(int yy=0;yy<=9;yy++){ if(arreglo[yx][yy]=="8"){ JOptionPane. showMessageDialog(null, "Encontre desdepues en "+ yx + " y " + yy ); } } } } } class AgrupamientoVecinos extends Agrupamiento{ public AgrupamientoVecinos (String ArregloDeBusqueda [][], String ValorABuscar, String ValorAModificar ){ arreglo=ArregloDeBusqueda; ValorNuevo=ValorAModificar; ValorViejo=ValorABuscar; } void BuscarVecino(int x,int y){ arreglo[x][y]=ValorNuevo; if(arreglo[x][y-1]==ValorViejo){ BuscarVecino(x,y-1); } if(arreglo[x-1][y-1]==ValorViejo){ BuscarVecino(x-1,y-1); } if(arreglo[x-1][y]==ValorViejo){ BuscarVecino(x-1,y); } if(arreglo[x-1][y+1]==ValorViejo){ BuscarVecino(x-1,y+1); } if(arreglo[x][y+1]==ValorViejo){ BuscarVecino(x,y+1); } if(arreglo[x+1][y+1]==ValorViejo){ BuscarVecino(x+1,y+1); } if(arreglo[x+1][y]==ValorViejo){ BuscarVecino(x+1,y); } if(arreglo[x+1][y-1]==ValorViejo){ BuscarVecino(x+1,y-1); } } }
Nota: Si quieres que comienze a agrupar los nodos vecinos desde una cordenada especifica y modifique los numero 1 a 8 del arreglo "arreglo": AgrupamientoVecinos objeto=new AgrupamientoVecinos(arreglo,"1","8"); objeto.BuscarVecino(3,4)
Si quieres que busque los nodos 1 en el arreglo "arreglo" y que de aii comienze a agrupar y a modificar los 1 por los 8: AgrupamientoVecinos objeto=new AgrupamientoVecinos(arreglo,"1","8"); for(int yx=0;yx<=9;yx++){ for(int yy=0;yy<=9;yy++){ if(arreglo[yx][yy]=="1"){ objeto.BuscarVecino(yx,yy); } } }
Atte: CyberServer Abel de la Fuente Arriaga Saludos desde Atlacomulco eaea EDITO-DEBCI: Usa las quotes de codigo en java para su mejor comprensión y analisis.
|
|
« Última modificación: 2 Julio 2010, 10:24 am por Debci »
|
En línea
|
|
|
|
Debci
Wiki
Desconectado
Mensajes: 2.021
Actualizate o muere!
|
Muy bien amigo Solo que agradeceria por enésima vez que se usen las quotes de codigo con java Saludines
|
|
|
En línea
|
|
|
|
cyberserver
Desconectado
Mensajes: 162
Lo que una mente crea, otra lo destruye
|
que bueno que les gusto, para muchos esto es aburrido y sin chiste pero para muchos otros es la base de muchas cosas: Aqui les traigo otra cosita que le agregue que es........Agrupamiento con numeros, esto quiere decir que a cada grupo que tenga vecinos sercanos se les va a poner un numero, y entre mas nodos conectados tengas como vecinos o alejados unos de otros mas grupos vas a tener. import javax.swing.*; public class Agrupamiento { public static void main (String[] args ) { int grupos=1; for(int yx=0;yx<=9;yx++){ for(int yy=0;yy<=9;yy++){ arreglo[yx][yy]="0"; } } arreglo[3][2]="1"; arreglo[3][3]="1"; arreglo[4][2]="1"; arreglo[2][4]="1"; arreglo[4][4]="1"; arreglo[6][6]="1"; arreglo[6][7]="1"; for(int yx=0;yx<=9;yx++){ for(int yy=0;yy<=9;yy++){ if(arreglo[yx][yy]=="1"){ AgrupamientoVecinos objeto =new AgrupamientoVecinos (arreglo, "1", Integer. toString(grupos )); objeto.BuscarVecino(yx,yy); grupos++; } } } JOptionPane. showMessageDialog(null, "Termino de Buscar"); for(int yx=0;yx<=9;yx++){ for(int yy=0;yy<=9;yy++){ if(arreglo[yx][yy].equals( "0" )==false ){ JOptionPane. showMessageDialog(null, "Encontre Agrupaciones con numero "+ arreglo [yx ][yy ] + " en " + yx + "," + yy ); } } } } } class AgrupamientoVecinos extends Agrupamiento{ public AgrupamientoVecinos (String ArregloDeBusqueda [][], String ValorABuscar, String ValorAModificar ){ arreglo=ArregloDeBusqueda; ValorNuevo=ValorAModificar; ValorViejo=ValorABuscar; } void BuscarVecino(int x,int y){ arreglo[x][y]=ValorNuevo; if(arreglo[x][y-1]==ValorViejo){ BuscarVecino(x,y-1); } if(arreglo[x-1][y-1]==ValorViejo){ BuscarVecino(x-1,y-1); } if(arreglo[x-1][y]==ValorViejo){ BuscarVecino(x-1,y); } if(arreglo[x-1][y+1]==ValorViejo){ BuscarVecino(x-1,y+1); } if(arreglo[x][y+1]==ValorViejo){ BuscarVecino(x,y+1); } if(arreglo[x+1][y+1]==ValorViejo){ BuscarVecino(x+1,y+1); } if(arreglo[x+1][y]==ValorViejo){ BuscarVecino(x+1,y); } if(arreglo[x+1][y-1]==ValorViejo){ BuscarVecino(x+1,y-1); } } }
entonces el arreglo ya agrupado quedaria asi: notaaaa: NO SE COMO HACER ESO DE "Usa las quotes de codigo en java para su mejor comprensión y analisis." :p
|
|
« Última modificación: 2 Julio 2010, 22:48 pm por cyberserver »
|
En línea
|
|
|
|
cyberserver
Desconectado
Mensajes: 162
Lo que una mente crea, otra lo destruye
|
Y si eres de aquellos que solo quieres usar el metodo y no complicarte con constructores y bucles y un sin fin de cosas aqui esta el metodo. class AgrupamientoVecinos{ public int Agrupar (String ArregloDeBusqueda [][], String ValorABuscar, boolean RenombradoAutomaticoGrupos, String ValorAModificar ){ int grupos=0; arreglo=ArregloDeBusqueda; ValorNuevo=ValorAModificar; ValorViejo=ValorABuscar; for(int yx=0;yx<ArregloDeBusqueda.length;yx++){ for(int yy=0;yy<ArregloDeBusqueda.length;yy++){ if(ArregloDeBusqueda[yx][yy]==ValorViejo){ if(RenombradoAutomaticoGrupos==false){ grupos++; this.BuscarVecino(yx,yy); }else{ grupos++; ValorNuevo =Integer. toString(grupos ); this.BuscarVecino(yx,yy); } } } } return grupos; } private void BuscarVecino(int x,int y){ arreglo[x][y]=ValorNuevo; if(arreglo[x][y-1]==ValorViejo ){ BuscarVecino(x,y-1); } if(arreglo[x-1][y-1]==ValorViejo){ BuscarVecino(x-1,y-1); } if(arreglo[x-1][y]==ValorViejo){ BuscarVecino(x-1,y); } if(arreglo[x-1][y+1]==ValorViejo){ BuscarVecino(x-1,y+1); } if(arreglo[x][y+1]==ValorViejo){ BuscarVecino(x,y+1); } if(arreglo[x+1][y+1]==ValorViejo){ BuscarVecino(x+1,y+1); } if(arreglo[x+1][y]==ValorViejo){ BuscarVecino(x+1,y); } if(arreglo[x+1][y-1]==ValorViejo){ BuscarVecino(x+1,y-1); } } }
y para poder usarlo solo necesitas escribir estas pocas lineas AgrupamientoVecinos objeto=new AgrupamientoVecinos(); int GruposTotales=objeto.Agrupar(arreglo,"1",true,null); JOptionPane. showMessageDialog(null, "Termino de Buscar en total fueron " + GruposTotales + " grupos");
E aqui el ejemplo completo de como usarlo import javax.swing.*; public class Agrupamiento { public static void main (String[] args ) { int grupos=1; for(int yx=0;yx<=9;yx++){ for(int yy=0;yy<=9;yy++){ arreglo[yx][yy]="0"; } } arreglo[3][2]="1"; arreglo[3][3]="1"; arreglo[4][2]="1"; arreglo[2][4]="1"; arreglo[4][4]="1"; arreglo[6][6]="1"; arreglo[6][7]="1"; arreglo[6][2]="1"; arreglo[8][5]="1"; AgrupamientoVecinos objeto=new AgrupamientoVecinos(); int GruposTotales=objeto.Agrupar(arreglo,"1",true,null); JOptionPane. showMessageDialog(null, "Termino de Buscar en total fueron " + GruposTotales + " grupos"); //Comprobacion de los grupos for(int yx=0;yx<=9;yx++){ for(int yy=0;yy<=9;yy++){ if(arreglo[yx][yy].equals( "0" )==false ){ JOptionPane. showMessageDialog(null, "Encontre Agrupaciones con numero "+ arreglo [yx ][yy ] + " en " + yx + "," + yy ); } } } } }
saludos
|
|
« Última modificación: 2 Julio 2010, 22:49 pm por cyberserver »
|
En línea
|
|
|
|
Debci
Wiki
Desconectado
Mensajes: 2.021
Actualizate o muere!
|
Muy buen aporte pero es para cerrar el tema macho... no has visto mi modificacion en tu primer mensaje? te he añadido las quotes de code java, y te he puesto una advertencia... Cambialo anda que no cuesta nada. Si nos abes es tan sencillo como darle a editar el primer mensaje que ya lo tienes hecho y mirar como te lo puse... Saludos[/code]
|
|
« Última modificación: 2 Julio 2010, 21:59 pm por Debci »
|
En línea
|
|
|
|
cyberserver
Desconectado
Mensajes: 162
Lo que una mente crea, otra lo destruye
|
OO dios vendito Dios que estudiamos ingenieria!!!!! vaya que si es bueno leer las viejas notas.... Deacuerdo con el Agrupamiento de nodos vecinos ooo dios que equivocado estaba, bueno en realidad equivocado no pero no tenia una semantica mi codigo ni un Orden!!!! Pero en que no tenia orden? Cuando buscaba los nodos conectados los buscaba en DESORDEN, que es Raiz,Izquierda,Raiz,Derecha :S bueno igual y no estaba tan mal pero pues en investigaciones futuras de busqueda de caminos nos mostraria datos erroneos ¿A chinga me entendiedon que Dije? Muy Facil!!!! un arreglo es igual a un ARBOL, entonces los metodos de Ordenamiento de caminos en un arbol para tener como resultado una cadena son: * N-ORDEN (IRD). Consiste en recorrer el árbol en el orden en que está. * POST-ORDEN (IDR). Consiste en recorrer las ramas en orden inverso. * PRE-ORDEN (RID). Consiste en recorrer las ramas desde la raíz hacia abajo. Entonces para buscar los vecinos (nodos hijos) tenemos que buscalos con un Orden. Nosotros escojimos RID ya que buscaremos los nodos vecinos primero la RAIZ, luego buscaremos en la parte izquierda y despues en la parte derecha!!! Y bingo!!!! encontro el orden y nos mando como resultado un mensaje diciendonos el recorrido de los nodos en una cadena!!! NOTA: esta cadena parece k no nos sirve para NADA pero error Esta cadena es la representacion de un objeto agrupado, entonces si kieremos saber si en un arreglo A de 100X100 existe dentro de este un arreglo B de 5X5 tomamos las cadenas de cada agrupacion y comparamos una por una!!!! asi si son iguales alguna de ellas nos dira que el objeto del arreglo B esta en el Arreglo A. Esto es usado en redes neuronales y reconocimiento de patrones asi como tratamiento de imagenes Miren graficamente asi funciona: Auuuu!!! Aqui esta el codiguin por si alguien le interesa import javax.swing.*; public class Agrupamiento { public static void main (String[] args ) { int grupos=1; for(int yx=0;yx<=9;yx++){ for(int yy=0;yy<=9;yy++){ arreglo[yx][yy]="0"; } } arreglo[4][2]="1"; arreglo[5][3]="1"; arreglo[4][4]="1"; arreglo[4][5]="1"; AgrupamientoVecinos objeto=new AgrupamientoVecinos(); int GruposTotales=objeto.Agrupar(arreglo,"1",true,null); JOptionPane. showMessageDialog(null, "Termino de Buscar en total fueron " + GruposTotales + " grupos"); //Comprobacion de los grupos for(int yx=0;yx<=9;yx++){ for(int yy=0;yy<=9;yy++){ if(arreglo[yx][yy].equals( "0" )==false ){ JOptionPane. showMessageDialog(null, "Encontre Agrupaciones con numero "+ arreglo [yx ][yy ] + " en " + yx + "," + yy ); } } } } } class AgrupamientoVecinos{ public int Agrupar (String ArregloDeBusqueda [][], String ValorABuscar, boolean RenombradoAutomaticoGrupos, String ValorAModificar ){ int grupos=0; arreglo=ArregloDeBusqueda; ValorNuevo=ValorAModificar; ValorViejo=ValorABuscar; for(int yx=0;yx<ArregloDeBusqueda.length;yx++){ for(int yy=0;yy<ArregloDeBusqueda[0].length;yy++){ if(ArregloDeBusqueda[yx][yy]==ValorViejo){ if(RenombradoAutomaticoGrupos==false){ grupos++; this.BuscarVecino(yx,yy,grupos); }else{ grupos++; ValorNuevo =Integer. toString(grupos ); this.BuscarVecino(yx,yy,grupos); } } } } JOptionPane. showMessageDialog(null, "Cadena de Recorrido " + CadenaGrafo [1]); return grupos; } public void BuscarVecino(int x,int y,int Grupos){ arreglo[x][y]=ValorNuevo; //Tipo de Busqueda RID(Raiz-Izquieda-Derecha con Busqueda Descendente) //Raiz try{ if(arreglo[x][y-1]==ValorViejo ){ CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"5,"; CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"2,"; BuscarVecino(x,y-1,Grupos); } try{ if(arreglo[x][y+1]==ValorViejo){ CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"5,"; CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"8,"; BuscarVecino(x,y+1,Grupos); } //Izquierda try{ if(arreglo[x-1][y-1]==ValorViejo){ CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"5,"; CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"1,"; BuscarVecino(x-1,y-1,Grupos); } try{ if(arreglo[x-1][y]==ValorViejo){ CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"5,"; CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"4,"; BuscarVecino(x-1,y,Grupos); } try{ if(arreglo[x-1][y+1]==ValorViejo){ CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"5,"; CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"7,"; BuscarVecino(x-1,y+1,Grupos); } //Derecha try{ if(arreglo[x+1][y-1]==ValorViejo){ CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"5,"; CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"3,"; BuscarVecino(x+1,y-1,Grupos); } try{ if(arreglo[x+1][y]==ValorViejo){ CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"5,"; CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"6,"; BuscarVecino(x+1,y,Grupos); } try{ if(arreglo[x+1][y+1]==ValorViejo){ CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"5,"; CadenaGrafo[Grupos]=CadenaGrafo[Grupos]+"9,"; BuscarVecino(x+1,y+1,Grupos); } } }
|
|
|
En línea
|
|
|
|
Diell
Desconectado
Mensajes: 2
|
Hola, estoy haciendo tratamiento de imagenes, mas especificamente lo que quiero es reconocer circulos u ovalos dentro de una imagen cargada desde archivo. Puedes ayudarme por favor.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Alguién conoce un buen curso/libro de minería de datos y estructura de datos?
Programación General
|
Aikanáro Anário
|
0
|
2,098
|
30 Agosto 2012, 23:06 pm
por Aikanáro Anário
|
|
|
¿Cómo declarar un arreglo e ingresarle datos?
.NET (C#, VB.NET, ASP)
|
Juancho25
|
1
|
3,049
|
4 Junio 2013, 20:56 pm
por El Benjo
|
|
|
Datos previo y siquiente en un arreglo
« 1 2 »
Programación C/C++
|
nolasco281
|
11
|
4,427
|
29 Abril 2014, 01:37 am
por rir3760
|
|
|
Suspenden a científico por minería de bitcoins con supercomputadora ....
Noticias
|
wolfbcn
|
0
|
1,496
|
10 Junio 2014, 21:46 pm
por wolfbcn
|
|
|
Actualización del estándar Bitcoin provoca problemas de minería generando ...
Noticias
|
wolfbcn
|
0
|
1,168
|
6 Julio 2015, 18:51 pm
por wolfbcn
|
|