La teoría de grafos no es mi área más fuerte en matemáticas y deseo implementarla, por lo que cuanto más simple sea la descripción, mejor. Gracias por cualquier respuesta de antemano.
El problema: deseo comparar moléculas químicas o grupos específicamente reactivos en una molécula química. Estas moléculas se almacenan como listas de adyacencia de nodos y bordes, sin embargo, el orden de los nodos es arbitrario, es decir, debo usar la información de conectividad real en sí. Obviamente, los nodos también contienen un tipo de átomo, por ejemplo, hidrógeno, carbono, etc., y los bordes pueden ser enlaces simples, enlaces dobles, etc., por lo que efectivamente también hay "información de tipo". (Escribir una matriz de adyacencia no funciona ya que los nodos se pueden numerar de manera diferente en los dos grupos).
Entonces, ¿cómo puedo comparar dos grupos/gráficos que están definidos solo por su lista de adyacencia?
Intenté buscar algoritmos, pero las preguntas típicas son "¿cuál es la ruta más corta de A a B?" o "cómo visitar todos los nodos", o tal vez estaba usando los términos de búsqueda incorrectos... Puedo (con un montón de intrincados código) hacer una comparación de fuerza bruta en un átomo, pero ¿cómo continuaría? Obviamente, usar la fuerza bruta es muy costoso... (aunque potencialmente manejable en mi caso...)
Editar: siguiendo los comentarios y buscando un poco, creo que esto sería identificar un subgráfico inducido por borde y vértice (nodo). - Es decir, cuál es el algoritmo asociado o un puntero en la literatura específica. (Cuanto más simple, mejor)
Representación
Desde la perspectiva de la teoría de grafos, las sustancias químicas pueden describirse de manera útil como gráficos simples con vértices y bordes coloreados. Los átomos generalmente se representan como vértices con el elemento como una etiqueta asociada. Los enlaces se pueden considerar como de múltiples aristas, pero los colores de las aristas son más habituales ya que hay un pequeño conjunto de órdenes de enlace (sencillo, doble, triple), aunque para completar podríamos incluir cuádruple y quíntuple, u otros tipos de enlace como hidrógeno, dativo , interacciones Cp-Metal, etc.
Problemas teóricos
La química y la teoría de grafos tienen una historia larga y fructífera, pero los problemas particulares sobre los que pregunta son el isomorfismo de grafos (GI) y/o el isomorfismo de subgrafos. Existe mucha información sobre GI como un problema, pero el enfoque para los informáticos y los matemáticos tiende a centrarse en la parte más difícil del problema. Por ejemplo, las noticias recientes sobre el resultado de László Babai sobre la complejidad de GI son fascinantes pero algo irrelevantes para la química.
Los productos químicos suelen ser gráficos bastante "simples", en algunos sentidos; a menudo tienen vértices de grado inferior a 5, ciertamente son escasos, la mayoría de ellos son planos o casi. Esto los hace bastante manejables para GI y algoritmos similares. Por otro lado, pueden ser bastante grandes: fullerenos, azúcares grandes, proteínas.
Algoritmos
Entonces, GI es más simple de describir que el problema del isomorfismo del subgrafo. Para comprobar que dos grafos son isomorfos, basta con generar una representación canónica de ambos grafos y compararlos. Por ejemplo InChI o canonical-SMILES, o signatures . Para obtener realmente el mapeo entre átomos, es necesario hacer algo como isomorfismo de subgrafo con todo el gráfico de consulta.
Entonces, una forma de obtener el mapeo entre un (sub) gráfico y otro gráfico es buscar repetidamente a través de ambos gráficos, construyendo el mapeo en el camino. Durante la búsqueda, se queda sin vértices en el gráfico de consulta (un isomorfismo) o llega a un estado en el que no se pueden realizar más asignaciones. En cuyo caso, el mapeo se reinicia en una 'raíz' diferente en la consulta, para tantos vértices en la consulta original.
Este proceso se describe en varios lugares, por ejemplo, este artículo compara dos algoritmos de búsqueda de subestructura. Por supuesto, existen algoritmos más sofisticados o especializados, pero VF2 es bastante bueno y bastante simple de implementar. Además, hay mucha literatura en el área de la "minería de grafos" que trata sobre el isomorfismo de subgrafos.
Jernej
DetlevCM
Jernej
DetlevCM
gileain
DetlevCM
DetlevCM
gileain
gileain
DetlevCM
DetlevCM