buildConditionalTransactions function

Map<List<int>, int> buildConditionalTransactions(
  1. Map<List<int>, int> conditionalPatternBases,
  2. Map<int, int> conditionalFrequentItems
)

Builds weighted conditional transactions from conditional pattern bases.

This function takes the raw paths found in the tree (the pattern bases) and filters and sorts them according to the frequent items found in the conditional context. This prepares the data needed to build a conditional FP-Tree.

Implementation

Map<List<int>, int> buildConditionalTransactions(
  Map<List<int>, int> conditionalPatternBases,
  Map<int, int> conditionalFrequentItems,
) {
  final weightedTransactions = <List<int>, int>{};

  for (final entry in conditionalPatternBases.entries) {
    final path = entry.key;
    final count = entry.value;

    final orderedPath =
        path
            .where((item) => conditionalFrequentItems.containsKey(item))
            .toList()
          ..sort((a, b) {
            final compare = conditionalFrequentItems[b]!.compareTo(
              conditionalFrequentItems[a]!,
            );
            if (compare == 0) {
              // Stable sort based on item ID
              return a.compareTo(b);
            }
            return compare;
          });

    if (orderedPath.isNotEmpty) {
      weightedTransactions[orderedPath] = count;
    }
  }

  return weightedTransactions;
}