User Tag List

Página 2 de 2 PrimerPrimer 12
Resultados 16 al 20 de 20

Tema: Ayuda con problemilla básico de Arrays JAVA (SPOILER: Soy muy malo)

  1. #16

    Fecha de ingreso
    Mar 2007
    Ubicación
    Barna
    Mensajes
    9,780
    Mencionado
    84 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    234
    Agradecer Thanks Received 
    1,333
    Thanked in
    Agradecido 693 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por Drumpi Ver mensaje
    Emmm, no estoy seguro de que eso sea más eficiente.
    Supongo que depende del lenguaje, pero en algunos la operación módulo es bastante "ineficiente", ya que no hay un mnemónico que ejecute la operación en un ciclo, y los he visto que tardan más de 4.
    Irrelevante por varios motivos:

    - El más importante: estoy casi seguro de que selecter25 no estaba pensando en la eficiencia cuando escribió ese condicional, sino que no ha entendido la operación módulo así que la corrección la estimo apropiada.

    Además:

    - No hay que hacer programación eficiente antes de tiempo. Si no detectas un problema de eficiencia, no lo arregles antes de tiempo.
    - en CPUs modernas, la operación módulo es mejor que el condicional si el branch perdictor de la CPU se equivoca en qué rama te bifurcarás. Por cierto, no tengo ninguna duda de que selecter nos podrá dar una clase magistral con las CPUs con el mejor branch predictor del mercado actual.
    - Curiosamente, si el array "lower" tiene longitud 32 en vez de 26 (es decir, si le añade 6 caracteres al final cualesquiera porque el algoritmo no debería llegar a ellos nunca), el compilador traducirá la operación módulo por un AND, que es muy superior a cualquier if/then. Los compiladores saben escribir código eficiente mucho mejor que nosotros.
    - Miles de cosas que no sabemos. Enlace relevante para C, no sé hasta qué punto aplica al JIT de Java: https://stackoverflow.com/questions/...-when-possible

    Y es que no hay que escribir código eficiente, hay que escribir código legible y dejar a los expertos que lo hagan eficiente... si es que es necesario.
    "Todo es absolutamente falso, salvo alguna cosa"

  2. Los siguientes 2 usuarios agradecen a juanvvc este post:

    selecter25 (13/01/2022), swapd0 (13/01/2022)

  3. #17

    Fecha de ingreso
    Aug 2003
    Mensajes
    662
    Mencionado
    4 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    12
    Agradecer Thanks Received 
    75
    Thanked in
    Agradecido 43 veces en [ARG:2 UNDEFINED] posts
    En el mundo de la programación competitiva (lo poco que he visto, en lo personal sólo he empezado a hacer alguna cosa básica) se evalúa, casi únicamente, la eficiencia de los algoritmos (con la típica notación BigO) y normalmente este tipo de "problemas de eficiencia" de mod vs if se consideran irrelevantes. Lo importante es dividir el problema en partes más pequeñas, y diseñar soluciones donde en la medida de lo posible no se aniden bucles que pasen por colecciones grandes. El problema de las soluciones más eficientes es siempre el mismo, no las entiende ni dios aunque sean una sóla linea de código.

    Un ejemplo muy curioso de este tipo de optimizaciones que no las entiende casi nadie, pero mágicamente funcionan: https://betterexplained.com/articles...e-square-root/

  4. #18

    Fecha de ingreso
    Sep 2005
    Mensajes
    13,134
    Mencionado
    215 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    392
    Agradecer Thanks Received 
    969
    Thanked in
    Agradecido 691 veces en [ARG:2 UNDEFINED] posts
    Gracias por las aclaraciones.

    No, si yo entiendo que es una tontería, que eso hoy día un ordenador ni se entera... pero a nosotros nos hicieron programar en ensamblador en su día, y la eficiencia del Echo en Wiz aún la tengo demasiado presente, y por tanto, tengo incrustado en la cabeza lo de hacer el código más eficiente desde el minuto 1, con todos los conocimientos que tengo.
    Es más, seguro que yo mismo he usado el módulo cientos de veces sin preocuparme si es más efectivo un IF... pero es que este caso me ha recordado directamente a las optimizaciones del motor de scroll tileado, y ese cambio del mod al if+suma supuso un pequeño empujoncito.

    De cara a entenderlo, la corrección está bien, por eso preguntaba si, al margen del ejercicio, mi propuesta era más eficiente o no, para saberlo a título personal. Siempre es bueno repasar algunas cosas de las bases.
    Fíjate que en ese enlace para C que pasas, juanvvc, hay varias respuestas que me dan la razón... pero claro, hablamos de una diferencia, en el peor de los casos, de unas decenas de ciclos de los miles de millones por segundo, y que realmente no sabemos lo que pasa en las cocinas de los compiladores (ni ganas de saberlo, oiga ).
    PROYECTOS REALIZADOS: FrikiMusic, Motor Scroll Tileado v3.2, Venturer2X (GP2X/WIZ), Echo, Screen Break Time
    PROYECTOS EN MARCHA (algunos): Bennu GP2X: 95% (necesito ayuda) ¡Antes de Halloween!: 92% SpaceH2H: 8%

  5. #19

    Fecha de ingreso
    Jun 2021
    Mensajes
    39
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    3
    Agradecer Thanks Received 
    7
    Thanked in
    Agradecido 6 veces en [ARG:2 UNDEFINED] posts
    Los foros de dudas de programacion siempre terminan en opiniones acerca de lenguages o si yo lo hago mejor que tu

  6. El siguiente usuario agradece a MasterGame este mensaje:

    pakoito (13/01/2022)

  7. #20

    Fecha de ingreso
    Sep 2006
    Ubicación
    Malaga
    Mensajes
    6,403
    Mencionado
    40 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,144
    Agradecer Thanks Received 
    1,215
    Thanked in
    Agradecido 839 veces en [ARG:2 UNDEFINED] posts
    En un ordenador moderno es mejor optimizar los accesos a memoria para que no se produzcan fallos de cache que optimizar cosas como el modulo de un numero.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.

Página 2 de 2 PrimerPrimer 12

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •