algomate library

AlgoMate - Algorithm selection co /// Sorting Strategies:

  • InsertionSort - O(n²) - Best for small datasets
  • MergeSort - O(n log n) - Stable, predictable performance
  • QuickSort - O(n log n) avg - Fast general-purpose sorting
  • HeapSort - O(n log n) - Guaranteed performance, in-place
  • ParallelMergeSort - O(n log n) - Multi-core merge sort for large datasets
  • ParallelQuickSort - O(n log n) - Multi-core quick sort with work-stealing

Generic Algorithms (for Custom Types):

  • GenericMergeSort<T> - O(n log n) - Stable sort for any Comparable<T>
  • GenericQuickSort<T> - O(n log n) - Fast sort for any Comparable<T>
  • GenericInsertionSort<T> - O(n²) - Simple sort for any Comparable<T>
  • GenericHeapSort<T> - O(n log n) - In-place sort for any Comparable<T>

Search Strategies:

  • LinearSearch - O(n) - Works on unsorted data
  • BinarySearch - O(log n) - Requires sorted data
  • ParallelBinarySearch - O(log n) - Multi-core binary search for very large arrays
  • GenericBinarySearch<T> - O(log n) - Binary search for any Comparable<T>
  • GenericLinearSearch<T> - O(n) - Linear search with custom equality

Custom Data Structures:

  • PriorityQueue<T> - Min-heap priority queue for any Comparable<T>
  • BinarySearchTree<T> - BST for any Comparable<T>
  • CircularBuffer<T> - Fixed-size ring buffer for any type T

Matrix Operations:

  • ParallelMatrixMultiplication - O(n³) - Multi-core block-based matrix multiplication
  • ParallelStrassenMultiplication - O(n^2.807) - Divide-and-conquer matrix multiplication

Graph Algorithms:

  • ParallelBFS - O(V + E) - Multi-core breadth-first search
  • ParallelDFS - O(V + E) - Multi-core depth-first search with work-stealing
  • ParallelConnectedComponents - O(V + E) - Multi-core Union-Find algorithm

Dynamic Programming:

  • KnapsackDP - O(nW) - 0/1 Knapsack problem optimization
  • LongestCommonSubsequenceDP - O(nm) - Text comparison and alignment
  • LongestIncreasingSubsequenceDP - O(n²) - Finding increasing patterns
  • CoinChangeDP - O(nW) - Optimal coin combination problem
  • EditDistanceDP - O(nm) - String transformation operations
  • MatrixChainMultiplicationDP - O(n³) - Optimal matrix multiplication order
  • SubsetSumDP - O(nW) - Finding subsets with target sum
  • FibonacciDP - O(n) - Top-down, bottom-up, and space-optimized approaches

String Processing:

  • KnuthMorrisPrattAlgorithm - O(n+m) - Efficient pattern matching
  • RabinKarpAlgorithm - O(n+m) - Rolling hash pattern matching
  • ZAlgorithm - O(n) - String analysis and pattern finding
  • LongestPalindromicSubstringAlgorithm - O(n²) - Find longest palindromes
  • ManacherAlgorithm - O(n) - Linear time palindrome detection
  • SuffixArrayAlgorithm - O(n log n) - String indexing and search
  • TrieAlgorithm - O(total length) - Prefix tree construction
  • AhoCorasickAlgorithm - O(n+m+z) - Multiple pattern matching
  • StringCompressionAlgorithm - O(n) - Run Length, LZ77, Huffman compression

AlgoMate provides intelligent algorithm selection with performance-focused architecture and comprehensive support for sorting, searching, benchmarking, and concurrent execution.

Key Features

  • 🎯 Intelligent Selection: Context-aware algorithm selection
  • Performance Focused: Zero-allocation hot paths
  • 🏗️ Clean Architecture: Domain-driven design with dependency inversion
  • 📊 Built-in Benchmarking: Statistical performance measurement
  • 🔄 Concurrent Execution: CPU-intensive operations in isolates
  • 🧪 Production Ready: Comprehensive error handling and logging
  • 🚀 Multi-Core Support: Parallel algorithms for divide-and-conquer operations

Quick Start

import 'package:algomate/algomate.dart';

void main() {
  final selector = AlgoSelectorFacade.development();

  final result = selector.sort(
    input: [64, 34, 25, 12, 22, 11, 90],
    hint: SelectorHint(n: 7),
  );

  result.fold(
    (success) => print('Sorted: ${success.output}'),
    (failure) => print('Failed: $failure'),
  );
}

Custom Objects Usage

Define Custom Comparable Objects

class Person implements Comparable<Person> {
  final String name;
  final int age;

  Person(this.name, this.age);

  @override
  int compareTo(Person other) => age.compareTo(other.age);

  @override
  String toString() => 'Person(name: $name, age: $age)';
}

Sort Custom Objects

final people = [
  Person('Alice', 30),
  Person('Bob', 25),
  Person('Carol', 35),
];

final sorter = GenericMergeSort<Person>();
final sorted = sorter.execute(people);
// Result: [Person(name: Bob, age: 25), Person(name: Alice, age: 30), Person(name: Carol, age: 35)]

Search Custom Objects

final searcher = GenericBinarySearch<Person>(Person('Alice', 30));
final index = searcher.execute(sorted);
print('Found Alice at index: $index');

Custom Data Structures

Priority Queue Usage

final pq = PriorityQueue<int>();
pq.add(5);
pq.add(2);
pq.add(8);
print(pq.removeMin()); // 2 (minimum)

Binary Search Tree Usage

final bst = BinarySearchTree<String>();
bst.insert('banana');
bst.insert('apple');
bst.insert('cherry');
print(bst.toSortedList()); // [apple, banana, cherry]

Parallel Algorithm Usage

Large Dataset Sorting

final largeData = List.generate(100000, (i) => Random().nextInt(1000000));

// Automatically selects parallel algorithms for large datasets
final result = selector.sort(
  input: largeData,
  hint: SelectorHint(n: largeData.length, preferParallel: true),
);

Matrix Operations

final matrixA = Matrix.fromLists([[1, 2], [3, 4]]);
final matrixB = Matrix.fromLists([[5, 6], [7, 8]]);

final result = selector.execute(
  strategy: ParallelMatrixMultiplication(),
  input: [matrixA, matrixB],
);

Graph Analysis

final graph = Graph.fromEdgeList(1000, edges);
final bfs = ParallelBFS(startVertex: 0);

final distances = bfs.execute(graph);
print('BFS distances: \$distances');

Dynamic Programming Examples

// Knapsack problem
final knapsack = KnapsackDP();
final result = knapsack.execute(KnapsackInput([2, 3, 4], [3, 4, 5], 5));
print('Maximum value: ${result.maxValue}');

// Longest Common Subsequence
final lcs = LongestCommonSubsequenceDP();
final lcsResult = lcs.execute(LCSInput('ABCDGH', 'AEDFHR'));
print('LCS: ${lcsResult.subsequence}');

// Coin Change
final coinChange = CoinChangeDP();
final coinResult = coinChange.execute(CoinChangeInput([1, 3, 4], 6));
print('Min coins: ${coinResult.minCoins}');

String Processing Examples

// Pattern matching with KMP
final kmp = KnuthMorrisPrattAlgorithm();
final result = kmp.execute(KMPInput('ABABCABABA', 'ABABCAB'));
print('Pattern found at: ${result.occurrences}');

// Multiple pattern search with Aho-Corasick
final ahoCorasick = AhoCorasickAlgorithm();
final multiResult = ahoCorasick.execute(
  AhoCorasickInput('She sells seashells by the seashore', ['she', 'sea', 'sells'])
);
print('Found patterns: ${multiResult.foundPatterns}');

// Find palindromes with Manacher's Algorithm
final manacher = ManacherAlgorithm();
final palindrome = manacher.execute(ManacherInput('ABACABAD'));
print('Longest palindrome: "${palindrome.longestPalindrome}"');

// Build Trie for word suggestions
final trie = TrieAlgorithm();
final trieResult = trie.execute(TrieInput(['cat', 'car', 'card', 'care', 'dog']));
print('Words starting with "car": ${trieResult.getWordsWithPrefix("car")}');

// String compression
final compression = StringCompressionAlgorithm();
final compressed = compression.execute(
  StringCompressionInput('AAAABBBBCCCC', type: CompressionType.runLength)
);
print('Compression ratio: ${compressed.compressionRatio}');

Built-in Algorithms

Sorting Strategies:

  • InsertionSort - O(n²) - Best for small datasets
  • MergeSort - O(n log n) - Stable, predictable performance
  • QuickSort - O(n log n) avg - Fast general-purpose sorting
  • HeapSort - O(n log n) - Guaranteed performance, in-place
  • ParallelMergeSort - O(n log n) - Multi-core merge sort for large datasets
  • ParallelQuickSort - O(n log n) - Multi-core quick sort with work-stealing

Search Strategies:

  • LinearSearch - O(n) - Works on unsorted data
  • BinarySearch - O(log n) - Requires sorted data
  • ParallelBinarySearch - O(log n) - Multi-core binary search for very large arrays

Matrix Operations:

  • ParallelMatrixMultiplication - O(n³) - Multi-core block-based matrix multiplication
  • ParallelStrassenMultiplication - O(n^2.807) - Divide-and-conquer matrix multiplication

Graph Algorithms:

  • ParallelBFS - O(V + E) - Multi-core breadth-first search
  • ParallelDFS - O(V + E) - Multi-core depth-first search with work-stealing
  • ParallelConnectedComponents - O(V + E) - Multi-core Union-Find algorithm

Advanced Usage

Custom Strategy Registration

class MyCustomSort extends Strategy\<List\<int\>, List\<int\>\> {
  // Implementation...
}

selector.registerStrategy(MyCustomSort());

Performance Benchmarking

final benchmarkRunner = HarnessBenchmarkRunner();
final comparison = benchmarkRunner.compare(
  functions: {'algorithm_a': () => sortA(data)},
  iterations: 1000,
);

Concurrent Execution

final isolateExecutor = DartIsolateExecutor();
final result = await isolateExecutor.execute(
  function: (data) => expensiveSort(data),
  input: largeDataset,
);

See individual class documentation for detailed API reference.

Classes

AhoCorasickAlgorithm
AhoCorasickInput
AhoCorasickResult
AlgoMateFailure
Base class for all AlgoMate failures.
AlgoMetadata
Immutable metadata describing an algorithm's characteristics and requirements.
AlgoSelectorFacade
Main facade for the AlgoMate algorithm selection system.
BellmanFordAlgorithmStrategy<T>
Bellman-Ford shortest path algorithm strategy
BellmanFordInput<T>
Input for Bellman-Ford algorithm
BellmanFordResult<T>
Result of Bellman-Ford algorithm
BenchmarkFailure
Failure during benchmarking operations.
BfsInput<T>
Input for BFS algorithm
BfsResult<T>
Result of BFS traversal
BFSTask
Task data for parallel BFS
BinaryInsertionSortStrategy
Binary insertion sort that uses binary search to find insertion point.
BinarySearchInsertionStrategy
Generic binary search that finds the insertion point for a target.
BinarySearchStrategy
Binary search strategy for finding elements in sorted lists.
BinarySearchTask
Task data for parallel binary search
BinarySearchTree<T extends Comparable>
Custom data structure: Binary Search Tree
BinarySearchTreeSearch<T extends Comparable>
Strategy for searching in Binary Search Tree
BinarySearchTreeSort<T extends Comparable>
Strategy for sorting using Binary Search Tree
BlockMultiplyTask
Task for block matrix multiplication
BlockResult
Result of block matrix multiplication
BreadthFirstSearchStrategy<T>
Breadth-First Search (BFS) traversal strategy
BSTNode<T extends Comparable>
Node for Binary Search Tree
BufferedLogger
Buffered logger that collects messages for testing or delayed output.
CatalogStats
Statistics about the strategy catalog.
CircularBuffer<T>
Custom data structure: Circular Buffer (Ring Buffer)
CircularBufferSearch<T>
Strategy for searching in Circular Buffer
CoinChangeDP
Coin Change Problem using Dynamic Programming
CoinChangeInput
Input for Coin Change problem
CoinChangeResult
Result for Coin Change problem
ComplexityRanker
Fast, allocation-free ranking service for time complexities.
ConfigurableLinearSearchStrategy
Generic linear search strategy that can be configured with different targets.
ConfigurableStrategy<I, O, TConfig>
Base class for strategies that can be configured with parameters.
ConsoleLogger
Console logger implementation for development and debugging.
ConsoleLoggerFactory
Console logger factory for creating loggers with consistent configuration.
DartIsolateExecutor
Dart isolate executor implementation for CPU-intensive tasks.
DepthFirstSearchStrategy<T>
Depth-First Search (DFS) traversal strategy
DfsInput<T>
Input for DFS algorithm
DfsResult<T>
Result of DFS traversal
DFSWorkerTask
Task data for parallel DFS worker
DijkstraAlgorithmStrategy<T>
Dijkstra's shortest path algorithm strategy
DijkstraInput<T>
Input for Dijkstra's algorithm
Edge<T>
Represents an edge in the graph
EditDistanceDP
Edit Distance (Levenshtein Distance) using Dynamic Programming
EditDistanceInput
Input for Edit Distance
EditDistanceResult
Result for Edit Distance
ErrorMessage
Message containing execution error.
ExecuteMessage<T>
Message to execute a function in an isolate.
ExecutionFailure
Failure during strategy execution.
Failure<T, F>
Represents a failed result containing a failure.
FibonacciBottomUpDP
Fibonacci using Bottom-Up DP (Tabulation)
FibonacciInput
Input for Fibonacci
FibonacciOptimizedDP
Space-Optimized Fibonacci using Bottom-Up DP
FibonacciResult
Result for Fibonacci
FibonacciTopDownDP
Fibonacci using Top-Down DP (Memoization)
FloydWarshallAlgorithmStrategy<T>
Floyd-Warshall all-pairs shortest path algorithm strategy
FloydWarshallInput<T>
Input for Floyd-Warshall algorithm
FloydWarshallResult<T>
Result of Floyd-Warshall algorithm
GenericBinarySearch<T extends Comparable>
Generic Binary Search for any Comparable type.
GenericBinarySearchInsertion<T extends Comparable>
Generic Search that returns the insertion point for binary search.
GenericHeapSort<T extends Comparable>
Generic Heap Sort for any Comparable type.
GenericInsertionSort<T extends Comparable>
Generic Insertion Sort for any Comparable type.
GenericLinearSearch<T>
Generic Linear Search for any type with custom equality check.
GenericLinearSearchAll<T>
Generic search that finds all occurrences of a target.
GenericMergeSort<T extends Comparable>
Generic Merge Sort that works with any Comparable type.
GenericPredicateSearch<T>
Generic search with predicate function for complex filtering.
GenericQuickSort<T extends Comparable>
Generic Quick Sort for any Comparable type with hybrid optimization.
Graph<T>
Graph representation using adjacency list
GraphEdge<T>
Represents a graph edge with source and destination
HarnessBenchmarkRunner
Benchmark runner implementation using Dart's built-in benchmark capabilities.
HeapSort
HeapSort implementation using binary max-heap.
HybridMergeSortStrategy
Hybrid merge sort that switches to insertion sort for small subarrays.
InapplicableInputFailure
Failure when input data doesn't meet strategy requirements.
InMemoryStrategyCatalog
In-memory implementation of StrategyCatalog optimized for fast lookup.
InPlaceInsertionSortStrategy
In-place insertion sort strategy that modifies the input list.
InsertionSortStrategy
Insertion sort strategy optimized for small datasets.
IsolateConfig
Configuration for isolate execution.
IsolateExecutor
Port for executing functions in isolates to avoid UI blocking.
IsolateFailure
Failure during async execution in isolate.
IsolateMessage
Base class for isolate messages.
IterativeHeapSort
Iterative HeapSort implementation to avoid recursion overhead.
IterativeMergeSortStrategy
Bottom-up merge sort that avoids recursion for better performance.
KMPInput
KMPResult
KnapsackDP
0/1 Knapsack Problem using Dynamic Programming
KnapsackInput
Input for Knapsack problem
KnapsackResult
Result for Knapsack problem
KnuthMorrisPrattAlgorithm
KosarajuAlgorithmStrategy<T>
Kosaraju's algorithm for strongly connected components
KruskalAlgorithmStrategy<T>
Kruskal's minimum spanning tree algorithm strategy
LCSInput
Input for Longest Common Subsequence
LCSResult
Result for Longest Common Subsequence
LinearSearchStrategy
Linear search strategy for finding elements in unsorted lists.
LinearSearchWithStatsStrategy
Linear search strategy with execution statistics.
LISInput
Input for Longest Increasing Subsequence
LISResult
Result for Longest Increasing Subsequence
LogEntry
A single log entry in the buffered logger.
Logger
Logger port for AlgoMate operations.
LoggerFactory
Factory for creating logger instances
LongestCommonSubsequenceDP
Longest Common Subsequence using Dynamic Programming
LongestIncreasingSubsequenceDP
Longest Increasing Subsequence using Dynamic Programming
LongestPalindromicSubstringAlgorithm
LongestPalindromicSubstringInput
LongestPalindromicSubstringResult
ManacherAlgorithm
ManacherInput
ManacherResult
Matrix
Matrix class for mathematical operations
MatrixChainInput
Input for Matrix Chain Multiplication
MatrixChainMultiplicationDP
Matrix Chain Multiplication using Dynamic Programming
MatrixChainResult
Result for Matrix Chain Multiplication
MemoryLimitFailure
Failure in memory management operations.
MergeSortStrategy
Merge sort strategy for stable, guaranteed O(n log n) sorting.
MinimumSpanningTreeResult<T>
Result of minimum spanning tree algorithms
MockBenchmarkRunner
Mock benchmark runner for testing scenarios.
MockIsolateExecutor
Mock isolate executor for testing purposes.
MstInput<T>
Input for minimum spanning tree algorithms
NoStrategyFailure
Failure when no suitable strategy is found for the given criteria.
OptimizedQuickSort
Optimized QuickSort with median-of-three pivot selection.
ParallelBFS
Parallel Breadth-First Search with level-synchronous approach
ParallelBinarySearch
Parallel Binary Search using divide-and-conquer
ParallelConnectedComponents
Parallel Connected Components using Union-Find with path compression
ParallelDFS
Parallel Depth-First Search using work-stealing
ParallelMatrixMultiplication
Parallel Matrix Multiplication using Block Decomposition
ParallelMergeSort
Parallel Merge Sort using Dart's compute-like functionality
ParallelQuickSort
Parallel Quick Sort with work-stealing pattern
ParallelStrassenMultiplication
Strassen's Algorithm for Matrix Multiplication (Parallel Implementation)
PrimAlgorithmStrategy<T>
Prim's minimum spanning tree algorithm strategy
PriorityQueue<T extends Comparable>
Custom data structure: Priority Queue (Min-Heap implementation)
PriorityQueueSearch<T extends Comparable>
Strategy for searching in Priority Queue
PriorityQueueSort<T extends Comparable>
Strategy for sorting using Priority Queue (Heap Sort variation)
QuickSort
QuickSort implementation using Lomuto partition scheme.
QuickSortTask
Task data for parallel quick sort
RabinKarpAlgorithm
RabinKarpInput
RabinKarpResult
ResourceLimitFailure
Failure when resource limits are exceeded.
Result<T, F>
Result type for handling success and failure cases without exceptions. Provides a type-safe way to handle operations that may fail.
ResultMessage<R>
Message containing execution result.
SafeBinarySearchStrategy
Binary search with bounds checking and debug assertions.
SccInput<T>
Input for strongly connected components algorithms
SelectorBuilder
Builder for configuring and creating AlgoSelector instances.
SelectorBuilderResult
Result of the builder containing all configured components.
SelectorHint
Immutable hints to guide algorithm selection and optimization. Provides performance hints without making assumptions about data correctness.
SelectorPolicy
Pure function service for ranking strategy candidates based on hints and heuristics.
ShortestPathResult<T>
Result of shortest path algorithms
SilentLogger
Silent logger that discards all messages (for production).
SimpleBenchmarkRunner
Simple benchmark runner for basic performance testing.
Strategy<I, O>
Abstract base class for all algorithm strategies.
StrategyCatalog
Repository port for storing and retrieving algorithm strategies.
StrategyRecommendation
A recommendation describing which strategy would be selected and why, without executing it.
StrategyRegistrationFailure
Failure in strategy registration or configuration.
StrategySignature
Describes the domain and characteristics of a strategy for catalog lookup. Used to find candidate strategies that match input/output types and categories.
StringCompressionAlgorithm
StringCompressionInput
StringCompressionResult
StronglyConnectedComponentsResult<T>
Result of strongly connected components
StubIsolateExecutor
Stub isolate executor for platforms where isolates are not available.
SubsetSumDP
Subset Sum Problem using Dynamic Programming
SubsetSumInput
Input for Subset Sum problem
SubsetSumResult
Result for Subset Sum problem
Success<T, F>
Represents a successful result containing a value.
SuffixArrayAlgorithm
SuffixArrayInput
SuffixArrayResult
TarjanAlgorithmStrategy<T>
Tarjan's algorithm for strongly connected components
TimeoutFailure
Failure when a timeout occurs.
TopologicalSortInput<T>
Input for topological sort
TopologicalSortResult<T>
Result of topological sort
TopologicalSortStrategy<T>
Topological sort algorithm strategy
TrieAlgorithm
TrieInput
TrieNode
TrieResult
UnionFind<T>
Union-Find data structure for Kruskal's algorithm
UnionFindResult
Result of Union-Find computation
UnionFindTask
Task data for Union-Find computation
ZAlgorithm
ZAlgorithmInput
ZAlgorithmResult

Enums

CompressionType
IsolateMessageType
Message types for isolate communication.
LogLevel
Log levels for controlling output verbosity
TimeComplexity
Represents the time complexity of an algorithm using Big O notation. Ordered from best (O(1)) to worst (O(2^n)) for ranking purposes.

Mixins

ExecutionStats<I, O>
Mixin for strategies that can provide execution statistics.

Exceptions / Errors

IsolateExecutionException
Exception thrown when isolate execution fails.
IsolateTimeoutException
Exception thrown when isolate execution times out.