elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  solucion del problema en JAVA
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: solucion del problema en JAVA  (Leído 3,287 veces)
bengy


Desconectado Desconectado

Mensajes: 501


mis virtudes y defectos son inseparables


Ver Perfil WWW
solucion del problema en JAVA
« en: 13 Julio 2011, 01:54 am »


Alguna sugerencia de como mejorar este code me refiero en las lineas de code

ejemplo:
entrada: hola mundo y hola a todos
Salida  : hola=2 mundo=1 y=1 a=1 todos=1


Código:
public String contarPalabras2(String palabras ){
    StringTokenizer toke      = new StringTokenizer(palabras);
    String muestra  = "";
    String dato  = "";
    String res  = "";
    int cont=0;
    ArrayList<String> array     = new ArrayList<String>();
    ArrayList<String> copia     = new ArrayList<String>();
    while(toke.hasMoreTokens()){
    array.add(toke.nextToken(" "));
    }
for(int z=0; z<=array.size()-1 ; z++){
copia.add(array.get(z));
}

   for(int a=0; a<=array.size()-1 ; a++){
       
        muestra=array.get(a);
   for(int b=a+1       ; b<=array.size()-1  ; b++){   
    if(muestra.equals(array.get(b))){
      array.remove(b);
    }
    }
}
//doble recorrido por un error ejemplo hola hola como estas hola hola
for(int a=0; a<=array.size()-1 ; a++){
       
        muestra=array.get(a);
   for(int b=a+1       ; b<=array.size()-1   ; b++){   
    if(muestra.equals(array.get(b))){
      array.remove(b);
    }
    }
}

for(int p=0; p<=array.size()-1 ; p++){
       
        dato=array.get(p);
   for(int q=0       ; q<=copia.size()-1   ; q++){   
    if(dato.equals(copia.get(q))){
      cont++;
    }
    }
    res=res+dato+" "+cont+" ";
    cont=0;
}

        return res;
    }
   
    public String  concatenar(String palabras){
    palabras=contarPalabras2(palabras);
    StringTokenizer adaptador= new StringTokenizer(palabras);
    ArrayList<String> arreglo= new ArrayList<String>();
    ArrayList<String> copia= new ArrayList<String>();
    String respuesta=" ";
   
        while(adaptador.hasMoreTokens()){
        arreglo.add(adaptador.nextToken(" "));
        }
        for(int a=0; a<=arreglo.size()-1; a++){
       
        copia.add(arreglo.get(a));
        if(a%2==0){
        copia.add("=");
    }
    else{
    copia.add(" ");
    }   
    }
    for(int b=0;b<=copia.size()-1; b++){
    respuesta=respuesta+ copia.get(b);
    }
       
   System.out.println(respuesta);
    return respuesta;
    }
}

Alguna sugerencia de como mejorar este code me refiero en las lineas de code


En línea

Valkyr


Desconectado Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
Re: solucion del problema en JAVA
« Respuesta #1 en: 15 Julio 2011, 14:09 pm »

Ya propuse en otro post una respuesta a este problema.

Cita de: Valkyr
Yo suponiendo que cada palabra esté separada por uno o más espacio haría lo siguiente:

Código
  1. public static void main(String[] args) throws IOException {
  2.  
  3. String[] palabras = br.readLine().split(" +");
  4. HashMap<String, Integer> resultados = new HashMap<String, Integer>();
  5. for(int i = 0; i < palabras.length; i++){
  6.        if(resultados.containsKey(palabras[i])){
  7.                int aux = resultados.get(palabras[i]);
  8.                aux++;
  9.                resultados.put(palabras[i], aux);
  10.        }
  11.        else{
  12.                resultados.put(palabras[i], 1);
  13.        }
  14. }
  15.  
  16. Set<String> keys = resultados.keySet();
  17. for (String string : keys) {
  18. System.out.println(string + ": " + resultados.get(string));
  19. }
  20. }
  21.  

haría uso de un mapa que viene para el caso bastante bien.

Saludos.

Es bastante sencillo el código y son muy pocas lineas en comparación con la solución que propones. Sí quisieses mostrar la solución en una única linea no tendría mayor complejidad que hacer lo siguiente:

Código
  1. String[] keys = new String[resultados.size()];
  2. resultados.keySet().toArray(keys);
  3. if(keys.length>0){
  4. System.out.print(keys[0] + ": " + resultados.get(keys[0]));
  5. for(int i = 1; i < keys.length;i++)
  6. System.out.print(" " + keys[i] + ": " + resultados.get(keys[i]));
  7. System.out.println();
  8.  

Por cierto, con split(" +") lo que hace es separar por uno o más espacios.

Saludos y espero te sirva.


En línea

bengy


Desconectado Desconectado

Mensajes: 501


mis virtudes y defectos son inseparables


Ver Perfil WWW
Re: solucion del problema en JAVA
« Respuesta #2 en: 18 Julio 2011, 01:50 am »

Algun otro code mas eficiente??? o por lo menos algun consejo para que mejore este code porfaaaaaa!!!
En línea

Valkyr


Desconectado Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
Re: solucion del problema en JAVA
« Respuesta #3 en: 18 Julio 2011, 02:17 am »

La solución que te propuse es bastante eficiente. El primer bucle for tiene un orden de complejidad de O(n). Luego a la hora de insertar en el mapa no tengo ni idea de que orden de complejidad ofrecerá, pero me imagino que será el más eficiente posible.

Quizás podría incrementarse un poco la eficiencia del código que te propuse de esta forma:

Código
  1. for (int i = 0; i < palabras.length; i++) {
  2. Integer aux = resultados.get(palabras[i]);
  3. if (aux != null) {
  4. aux++;
  5. resultados.put(palabras[i], aux);
  6. } else {
  7. resultados.put(palabras[i], 1);
  8. }
  9. }

Nos aprovecharíamos de que si el elemento no está almacenado en el mapa el método get() devuelve un valor nulo, y por tanto no tendríamos que realizar primero la comprobación de "ifresultados.contains()" para luego realizar el get() y posteriormente el put().

El último bucle es totalmente necesario, ya que debes recorrer todo el mapa para saber la solución, también tiene orden de complejidad O(n) en el peor caso.

Sí lo que quieres son optimizaciones sobre tu código, con lo que te he comentado tienes de sobra para pensar sobre que podrías hacer.

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema sin solución! [C] HELP!
Programación C/C++
Borluck 1 1,670 Último mensaje 19 Abril 2013, 16:22 pm
por 0xDani
RETO solvedor sistemas de ecuaciones (con solución)[JAVA]
Java
trolleoatodos 3 2,887 Último mensaje 2 Septiembre 2013, 13:35 pm
por trolleoatodos
Problemas con java 8.25 no se deinstala por completo en Windows 7.
Windows
fifinio 2 4,371 Último mensaje 15 Noviembre 2014, 16:09 pm
por fifinio
Solución Ly-Crackme Java
Ingeniería Inversa
rub'n 2 4,353 Último mensaje 28 Enero 2018, 17:23 pm
por .:UND3R:.
SOLUCION REMUNERADA - VPN PROBLEMA CON SPOTIFY
Dudas Generales
Jonnhy10 3 2,594 Último mensaje 22 Agosto 2020, 21:33 pm
por Machacador
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines