Feda /dev/ - No Javascript allowed

Normas
spoiler
Personas non gratas
Memes feda dev




Dr_Manhattan

hostias, solo falta eisen y la rata para poder nukear el subforo

Lecherito

Y volver a mv.nerd

JuAn4k4

#54540 El test, Lo que tiene que borrar es el test.

desu

Estaba haciendo un leetcode.

La solución "optima" On en tiempo y o1 en espacio es más lenta:

class Solution:
    def isPalindrome(self, word: str) -> bool:
        left, right = 0, len(word) - 1
        while left < right:
            while left < right and not word[left].isalnum():
                left += 1
            while left < right and not word[right].isalnum():
                right -= 1
            if word[left].lower() != word[right].lower():
                return False
            else:
                left += 1
                right -= 1
        return True

Que mi primera horrible solucion en On tiempo y On espacio:

class Solution:
    def isPalindrome(self, word: str) -> bool:
        r = []
        for w in word:
            if w.isalnum():
                r.append(w.lower())
        for i in range(0, len(r)):
            left = i
            right = len(r) - 1 - i
            if r[left] != r[right]:
                return False
        return True

xq es más lento mi mala solución que la "optima" jeje

pregunta que me encanta hacer a los entrevistadores y fperos para descartar malas empresas

y lenta hablamos de un 20% mas lenta

3 respuestas
PhDfailer

#54544

tu segunda solución te delata como PACO

r = [w.lower() for w in word if w.isalnum()]
1 respuesta
desu

#54545 xq? es un 20% más rápida

ah, no suelo usar comprensiones asi en python xq me gusta que mi codigo sea facil de leer para gente que no usa python, en la mayoria de lenguajes el for if como lo he hecho existe.

pero vamos, estas haciendo la opcion "no optima" aun mas rapida. xq las list comprension muchas veces se optimzian en interprete.

1 1 respuesta
PhDfailer

#54546 era coña, simplemente puedes hacer las 4 primeras líneas en una, que es igual de rápido pero más bonito

1 respuesta
desu

#54547 bueno, depende de que es mas rapido con list comprehension

1 1 respuesta
Wei-Yu

fyi comprehension y looping no es lo mismo de cara al intérprete

https://switowski.com/blog/for-loop-vs-list-comprehension

Why is list comprehension faster than a for loop?

But why is the list comprehension faster than a for loop? When you use a for loop, on every iteration, you have to look up the variable holding the list and then call its append() function. This doesn't happen in a list comprehension. Instead, there is a special bytecode instruction LIST_APPEND that will append the current value to the list you're constructing.

p.s: no me leí el código, son 50e si quieres que lo revise

2 2 respuestas
PhDfailer

#54548 #54549 interesante, gracias

desu

#54549 si, gracias, lo he dicho en los dos posts anteriores. eres muy util.

pero vamos, si estas haciendo python te deberia dar bastante igual hacer un loop o una list comprehension... deberias usar python solo para llamar a C (numpy).

pantocreitor

Una duda por si habéis usado alguna vez datagrip porque me ha dejado un poco loco.
Tengo 2 schemas, A y B, en el A están las tablas y en el B triggers.
En SQL Developer (la vieja fea, lenta y confiable) si entro al schema B tengo una sección de triggers, los edito, pruebo y todo OK.
En Datagrip, para acceder al trigger debo hacerlo entrando en el schema A, ir a la tabla sobre la que se ejecuta el trigger y odificarlo ahí.
Hasta aquí todo bien.

PROBLEMA
En Datagrip, al modificar el trigger se crea un nuevo trigger en schema A, no se modifica el trigger del schema B, este trigger usa diferentes recursos por lo que no compila en el schema A. He probado temas de configuración y demás pero parece que Datagrip, al detectar el trigger sobre una tabla del schema A (aunque no esté en el schema A) lo almacena ahí, jodiéndome y obligándome a irme al puñetero SQL Developer (es un trigger de la ostia y me da pereza modificarlo por consola).

Alguna idea por si es algo de config que no veo?

Wei-Yu

no contesto a tu pregunta pero no uséis database triggers

es muy difícil crearse un modelo mental de cómo funcionan las cosas si hay triggers que no sabes que existen o no te acuerdas de ellos y es fácil que asumas cosas que no son ciertas y sólo lo descubras cuando se cumplan x condiciones

1 respuesta
pantocreitor

#54553 Estamos migrando poco a poco todo fuera de la DB, pero aún hay mucha lógica por ahí (la DB es un mosntruo xD).
En este caso me han pedido que echase un cable para un fix por un problema que se ha detectado y lo rápido pues es modificar el trigger.

Pero vamos, si te enseño el esquema este de los triggers :psyduck:

Wei-Yu

si te enseño el esquema este de los triggers :psyduck:

worst dungeon crawler I've ever played

1
B

#54544 Es tan importante el espacio en sistemas con teras de memoria que me parece una versión tiempo cojunda... y mas para hacer el programa mas lento. PURA INGENIERIA COLEGA.
Te falta un sleep en los bucles para no demandar mucho a la CPU y ya de 10.

1 respuesta
GaN2

#54556 que tu sistema tenga recursos a mansalva no quiere decir que tengas que hacer código de mierda…

4 1 respuesta
Dr_Manhattan

tenía que venir el yankee a decirlo

denimH

#54544 danos una masterclass de algoritmos anda.

Asi a bote pronto la primera es On/2 porque no recorres la palabra completa y la segunda 02n porque la recorres entera y la compruebas con su len-index haciendo dos veces la misma comprobacion no?

Y las dos son O1 en espacio.

1 respuesta
Dr_Manhattan

Jastro, ¿vas a hacer encuesta de moderación como se está haciendo en otros subforos?

me molaría ver a desu de moderador

PiradoIV

Hablando de rendimiento, acabo de hacer un commit que hace que el framework web que mantengo pueda procesar 10k requests por segundo, en vez de 1k.

1 respuesta
Wei-Yu

el commit:

- thread_pool = 1000
+ thread_pool = 10000
10 1 respuesta
desu

#54559 no tiene nada que ver con algoritmos.

siempre explico lo mismo. El leetcode se traduce fatal al mundo real porque lo que importa es usar bien la CPU y su caché. Localidad. Iterar linealmente. Leer memoria secuencial. L1 l2 tamaño de página y fallos de página.

Hacer for loops es lo mejor porque cargas en CPU todo lo que necesitas. Irá más rápido que hacer acceso directo con punteros por mucho que la teoría te diga que es On2 vs On.

Precalcular cosas y guardarlas en stack y luego usarlas irá más rápido que acceder a memoria y hacer todo en menos pasos.

Si no tienes límites de espacio reales en RAM. El 80% de los algoritmos de leetcode y que se enseñan en la uni son estupidos.

1 1 respuesta
Kaledros

Pues ya me he puesto en LinkedIn que estoy "casually looking", a ver qué me encuentro.

1 respuesta
B

#54564 Pues si es como en Tinder con un puñado de locas que te ofrecerán cualquier cosa entre terminar follando en un portal después de cenar o matrimonio para que cuides de sus dos hijos, buena suerte bro

1 2 respuestas
Kaledros

#54565 Ya, si mi curro actual lo encontré así XD Thx!

1 respuesta
B

#54566 En un portal después de cenar o jugando al crash en casa de una random?

2 respuestas
Dr_Manhattan

#54567 follar está sobrevalorado, prefiero el crash

Kaledros

#54567 En comisaría después de cenar.

B

#54557 Si me dices que estás trabajando con microcontroladores pues claro, para hacer el ganso pues no.

1 respuesta