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

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

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

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

из таблицы стилей CSS, возможно, что несколько наборов правил применяются к данному элементу (скажем,

hello

 в моем документе).

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

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

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

Спасибо

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

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