Эффективный алгоритм для сравнения специфики правил CSS

Мне было интересно, какой эффективный алгоритм будет в следующем сценарии:

Учитывая проанализированный набор правил CSS, например.

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

из таблицы стилей CSS, возможно, что несколько наборов правил применяются к данному элементу (скажем,<p class="pStyle anotherPStyle">hello</p> в моем документе).

Мне нужно определить, какие правила в таблице стилей применяются в первую очередь к данному элементу (так что здесь этоp, pStyle and anotherPStyle), а затем создайте компаратор, способный сортировать применимые правила по специфике (от наиболее специфичных к наиболее общим). ПРИМЕЧАНИЕ. Я уже разработал алгоритм для применения правил после сортировки, поэтому вам не нужно эффективно решать эту проблему.

Я играю с несколькими идеями, а именно с одной, которая включает определение уровня в DOM-дереве, к которому относится данное правило ... Хотя я не уверен, что это правильный путь?

Как движок браузера делает это эффективно? Я собираюсь воспроизвести его на Java, но мне удобно работать со многими другими языками, поэтому любой код, который вы можете предложить, будет наиболее ценным.

Спасибо

Ответы на вопрос(1)

Ваш ответ на вопрос