Algoritmo eficiente para comparar la especificidad de las reglas CSS

Me preguntaba qué sería un algoritmo eficiente en el siguiente escenario:

Dado un conjunto analizado de reglas de css, por ejemplo.

     p.pStyle{margin-bottom:20px;font-family:Arial;}
     p{font-family:Verdana;}
     p.anotherPStyle{margin-bottom:10px;}

a partir de una hoja de estilo css, es posible que varios conjuntos de reglas se apliquen a un elemento dado (por ejemplo,<p class="pStyle anotherPStyle">hello</p> en mi documento).

Necesito determinar qué reglas en la hoja de estilo se aplican a un elemento dado en primer lugar (así que aquí estáp, pStyle and anotherPStyle), y luego crear un Comparador que sea capaz de ordenar las reglas aplicables por especificidad (desde la más específica hasta la más general). NOTA: Ya he diseñado un algoritmo para aplicar las reglas una vez ordenadas para que no tenga que resolver ese problema de manera eficiente.

He estado jugando con varias ideas, a saber, una que involucra determinar el nivel en el árbol DOM al que una determinada regla es específica para ... ¿Aunque no estoy seguro si esta es la forma correcta de hacerlo?

¿Cómo hace el motor del navegador esto de manera eficiente? Estoy buscando replicarlo en Java, pero me siento cómodo con muchos otros lenguajes, por lo que cualquier código que pueda ofrecer es muy apreciado.

Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta