En informática y teoría de grafos , el término codificación por colores se refiere a una técnica algorítmica que resulta útil para descubrir motivos de redes . Por ejemplo, se puede utilizar para detectar una ruta simple de longitud k en un grafo determinado . El algoritmo de codificación por colores tradicional es probabilístico , pero se puede desaleatorizar sin demasiada sobrecarga en el tiempo de ejecución.
La codificación por colores también se aplica a la detección de ciclos de una longitud dada y, de manera más general, se aplica al problema de isomorfismo de subgrafos (un problema NP-completo ), donde produce algoritmos de tiempo polinomial cuando el patrón de subgrafo que está tratando de detectar tiene un ancho de árbol acotado .
El método de codificación de colores fue propuesto y analizado en 1994 por Noga Alon , Raphael Yuster y Uri Zwick . [1] [2]
Los siguientes resultados se pueden obtener mediante el método de codificación de colores:
Para resolver el problema de encontrar un subgrafo en un grafo dado G = ( V , E ) , donde H puede ser un camino, un ciclo o cualquier grafo de ancho de árbol acotado donde , el método de codificación de colores comienza coloreando aleatoriamente cada vértice de G con colores, y luego intenta encontrar una copia colorida de H en G coloreado . Aquí, un grafo es colorido si cada vértice en él está coloreado con un color distinto. Este método funciona repitiendo (1) colorear aleatoriamente un grafo y (2) encontrar una copia colorida del subgrafo objetivo, y eventualmente el subgrafo objetivo se puede encontrar si el proceso se repite una cantidad suficiente de veces.
Supongamos que una copia de H en G se vuelve colorida con una probabilidad p distinta de cero . De ello se deduce inmediatamente que si se repite la coloración aleatoria1/pag veces, entonces se espera que esta copia se vuelva colorida una vez. Nótese que aunque p es pequeño, se muestra que si, p es solo polinomialmente pequeño. Supóngase nuevamente que existe un algoritmo tal que, dado un grafo G y una coloración que asigna cada vértice de G a uno de los k colores, encuentra una copia de la colorida H , si existe, dentro de un tiempo de ejecución O ( r ) . Entonces el tiempo esperado para encontrar una copia de H en G , si existe, es.
A veces también es conveniente utilizar una versión más restringida del colorido. Por ejemplo, en el contexto de la búsqueda de ciclos en grafos planares , es posible desarrollar un algoritmo que encuentre ciclos bien coloreados. En este caso, un ciclo está bien coloreado si sus vértices están coloreados con colores consecutivos.
Un ejemplo sería encontrar un ciclo simple de longitud k en el gráfico G = ( V , E ) .
Al aplicar el método de coloración aleatoria, cada ciclo simple tiene una probabilidad de volverse colorido, ya que existen formas de colorear los k vértices del ciclo, entre los cuales hay ocurrencias coloridas. Luego, se puede usar un algoritmo (descrito a continuación) para encontrar ciclos coloridos en el grafo G coloreado aleatoriamente en el tiempo , donde es la constante de multiplicación de matrices. Por lo tanto, se necesita tiempo total para encontrar un ciclo simple de longitud k en G .
El algoritmo de búsqueda de ciclos coloridos funciona encontrando primero todos los pares de vértices en V que están conectados por un camino simple de longitud k − 1 , y luego verificando si los dos vértices en cada par están conectados. Dada una función de coloración c : V → {1, ..., k } para colorear el grafo G , enumera todas las particiones del conjunto de colores {1, ..., k } en dos subconjuntos C 1 , C 2 de tamaño cada uno. Nótese que V puede dividirse en V 1 y V 2 en consecuencia, y sea G 1 y G 2 los subgrafos inducidos por V 1 y V 2 respectivamente. Luego, encuentre recursivamente caminos coloridos de longitud en cada uno de G 1 y G 2 . Supongamos que la matriz booleana A 1 y A 2 representan la conectividad de cada par de vértices en G 1 y G 2 por un camino colorido, respectivamente, y sea B la matriz que describe las relaciones de adyacencia entre los vértices de V 1 y los de V 2 , el producto booleano da todos los pares de vértices en V que están conectados por un camino colorido de longitud k − 1 . Por lo tanto, la relación recursiva de las multiplicaciones de matrices es , lo que produce un tiempo de ejecución de . Aunque este algoritmo encuentra solo los puntos finales del camino colorido, se puede incorporar otro algoritmo de Alon y Naor [4] que encuentra los propios caminos coloridos.
La desaleatorización de la codificación de colores implica enumerar los posibles colores de un grafo G , de modo que la aleatoriedad de la coloración de G ya no sea necesaria. Para que el subgrafo objetivo H en G sea detectable, la enumeración debe incluir al menos una instancia donde H sea colorida. Para lograr esto, es suficiente enumerar una familia k -perfecta F de funciones hash desde {1, ..., | V |} hasta {1, ..., k } . Por definición, F es k -perfecta si para cada subconjunto S de {1, ..., | V |} donde , existe una función hash h en F tal que h : S → {1, ..., k } es perfecta . En otras palabras, debe existir una función hash en F que coloree cualquier k vértice dado con k colores distintos.
Existen varios enfoques para construir dicha familia hash k -perfecta:
En el caso de la desaleatoriedad de la coloración adecuada, donde cada vértice del subgrafo se colorea consecutivamente, se necesita una familia k -perfecta de funciones hash desde {1, ..., | V |} hasta {1, ..., k !} . Se puede construir una familia k -perfecta suficiente que mapee desde {1, ..., | V |} hasta {1, ..., k k } de una manera similar al enfoque 3 anterior (el primer paso). En particular, se hace utilizando nk log k bits aleatorios que son casi k log k independientes, y el tamaño de la familia k -perfecta resultante será .
El método de desaleatorización del código de colores se puede paralelizar fácilmente, lo que produce algoritmos NC eficientes .
Recientemente, la codificación por colores ha atraído mucha atención en el campo de la bioinformática. Un ejemplo es la detección de vías de señalización en redes de interacción proteína-proteína (PPI). Otro ejemplo es el descubrimiento y recuento del número de motivos en redes PPI. El estudio tanto de las vías de señalización como de los motivos permite una comprensión más profunda de las similitudes y diferencias de muchas funciones, procesos y estructuras biológicas entre los organismos.
Debido a la enorme cantidad de datos genéticos que se pueden recopilar, la búsqueda de vías o motivos puede llevar mucho tiempo. Sin embargo, al explotar el método de codificación por colores, los motivos o vías de señalización con vértices en una red G con n vértices se pueden encontrar de manera muy eficiente en tiempo polinomial. Por lo tanto, esto nos permite explorar estructuras más complejas o más grandes en redes PPI.