Как избежать сложности O (n ^ 2) при группировании записей в XSLT?

Я часто сталкиваюсь с проблемами производительности, когда я XSL преобразовываю большие объемы данных в HTML. Эти данные обычно представляют собой всего лишь пару очень больших таблиц примерно такой формы:


    1
    abc
  
    1
    def
  
    2
    ghi
  

Во время преобразования я хочу визуально сгруппировать записи, подобные этой.

+--------------+
| Group 1      |
+--------------+
|   abc        |
|   def        |
+--------------+
| Group 2      |
+--------------+
|   ghi        |
+--------------+

Глупая реализация - это (набор взят из http: / /exslt.org. Фактическая реализация немного отличается, это просто пример):


  

  
  
    
  

Легко видеть, что это имеет тенденцию к сложности O (n ^ 2) . Хуже того, ведь в каждой записи много полей. Обрабатываемые данные могут достигать нескольких десятков МБ, количество записей может доходить до 5000. В худшем случае каждая запись имеет свою группу и 50 полей. И что еще хуже, возможен еще один уровень группировки, что делает это O (n ^ 3)

Теперь было бы довольно много вариантов:

  1. Я мог бы найти решение Java для это касается карт и вложенных структур данных. Но я хочу улучшить свои навыки XSLT, так что на самом деле это последний вариант.
  2. Я, возможно, не замечаю хорошей функции в Xerces / Xalan / Exslt, которая намного лучше справляется с группировкой
  3. Я могу создать какой-нибудь индекс для / table / record / group
  4. Вы можете доказать мне, что подход явно быстрее в этом случае использования, чем подход .

Как вы думаете, как можно уменьшить эту O (n ^ 2) сложность?

5
задан Lukas Eder 10 November 2011 в 09:38
поделиться