Alan Profile picture
21 Feb, 18 tweets, 3 min read
Mucha gente se queja que las estructuras de datos y los algoritmos no sirven en el “trabajo real”. Aquí te cuento como solucione un bug con teoría de grafos 🧵
Hay 2 toggles que pueden estar prendidos o apagados, de entrada tienes 4 posibles combinaciones: 2^2 = 4. Sin embargo, el segundo toggle no puede estar prendido si el segundo está apagado, por lo tanto solo existen 3 posibles combinaciones.
Pero hay más, supongamos que el segundo solo puede estar habilitado por alguna condición externa, es decir si esa condición X es verdadera, no importa si el primer toggle está habilitado, el segundo debe estar deshabilitado.
Por lo tanto tenemos 8 posibles combinaciones, dado que tenemos 3 variables y cada variable puede ser verdadera o falsa, por lo tanto el número de combinaciones es 2^3 = 8
Basado en esta información es relativamente sencillo encontrar las condiciones para poner en un if...else con una tabla de verdad y simplificar la condición con una disyuncion lógica de minterms, o coloquialmente conocida como suma de productos. O... lo es?
En el primer escenario, cuando la página carga: si x = true, a = true, b = true, entonces el toggle siempre debe estar habilitado aunque x evalúe a true.
En el segundo escenario, cuando la página carga si x = true, a = true, b = false. Entonces el segundo toggle siempre debe estar deshabilitado porque x evalua a true
Entonces aquí surge un problema: en el primer escenario si solamente utilizas los valores de a, b y x. Independientemente del valor de x, el segundo toggle debe estar habilitado. Cierto? [{1, 1, 1}, {1, 0, 1}, {1, 1, 0}, {1, 1, 1}] siempre habilitan el segundo toggle
En el segundo escenario, el segundo toggle siempre está deshabilitado porque al momento de cargar la página los valores de a, b y x respectivamente eran {1, 0, 1}
Notas el problema? La combinación {1, 0, 1} en el primer escenario evalúa a verdadero y en el segundo escenario, la misma condición evalúa a falso. Entonces como lo solucionas?
GRAFOS AL RESCATE! Si representas los estados iniciales de tu aplicación como nodos en un grafo, y los ejes que conectan a los nodos como eventos como: “toggle_a” y “toggle_b”...
Puedes determinar de cuál nodo de origino el evento, a cual nodo debe transicionar y bajo que condiciones. Lo puedes lograr sin grafos? Claro! Pero el código es feo y difícil de comprender. Con un grafo solo necesitas objetos simples y condiciones sencillas de leer
Es por eso que las compañías grandes se enfocan mucho en que los candidatos sepan algoritmos y estructuras de datos porque conocer la estructura de datos que resuelve tu problema es más eficiente que re-inventar la rueda.
Mañana pongo el código para resolver este problema porque ahorita estoy en el celular, pero NO es complicado. Aprender grafos y árboles es súper sencillo si te los saben explicar.
El problema es que muchos instructores no saben cómo explicarlos, ni mucho menos como aplicarlos a la vida real. Eso no quiere decir que no tengan utilidad.
En muchas ocasiones he aplicado grafos y árboles en situaciones “triviales” que a primera vista no parece que los necesiten pero conforme el código evoluciona, se vuelve más evidente que esas estructuras eran las ideales para el problema.
La moraleja: las compañías “big tech” no te preguntan algoritmos y estructuras por “mamones”, tienen su lugar en este campo y usarlas no es raro si es que las conoces
Acá el resultado :) codesandbox.io/s/intelligent-…

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Alan

Alan Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @bitforth

21 Feb
Lo prometido es deuda, aquí esta el problema original sin resolver, por si lo quieres intentar: codesandbox.io/s/epic-snyder-…
Y aqui esta la solución. Todo lo puse en un archivo para simplificar cosas, el punto de esta solucion es mostrar el ejemplo usando grafos, no mostrar buenas practicas o codigo organizado. codesandbox.io/s/intelligent-…
La modifiqué un poco para que se puedan apreciar los diferentes estados iniciales Image
Read 8 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!