algomate library
AlgoMate - Algorithm selection co /// Sorting Strategies:
InsertionSort
- O(n²) - Best for small datasetsMergeSort
- O(n log n) - Stable, predictable performanceQuickSort
- O(n log n) avg - Fast general-purpose sortingHeapSort
- O(n log n) - Guaranteed performance, in-placeParallelMergeSort
- O(n log n) - Multi-core merge sort for large datasetsParallelQuickSort
- 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 anyComparable<T>
GenericQuickSort<T>
- O(n log n) - Fast sort for anyComparable<T>
GenericInsertionSort<T>
- O(n²) - Simple sort for anyComparable<T>
GenericHeapSort<T>
- O(n log n) - In-place sort for anyComparable<T>
Search Strategies:
LinearSearch
- O(n) - Works on unsorted dataBinarySearch
- O(log n) - Requires sorted dataParallelBinarySearch
- O(log n) - Multi-core binary search for very large arraysGenericBinarySearch<T>
- O(log n) - Binary search for anyComparable<T>
GenericLinearSearch<T>
- O(n) - Linear search with custom equality
Custom Data Structures:
PriorityQueue<T>
- Min-heap priority queue for anyComparable<T>
BinarySearchTree<T>
- BST for anyComparable<T>
CircularBuffer<T>
- Fixed-size ring buffer for any type T
Matrix Operations:
ParallelMatrixMultiplication
- O(n³) - Multi-core block-based matrix multiplicationParallelStrassenMultiplication
- O(n^2.807) - Divide-and-conquer matrix multiplication
Graph Algorithms:
ParallelBFS
- O(V + E) - Multi-core breadth-first searchParallelDFS
- O(V + E) - Multi-core depth-first search with work-stealingParallelConnectedComponents
- O(V + E) - Multi-core Union-Find algorithm
Dynamic Programming:
KnapsackDP
- O(nW) - 0/1 Knapsack problem optimizationLongestCommonSubsequenceDP
- O(nm) - Text comparison and alignmentLongestIncreasingSubsequenceDP
- O(n²) - Finding increasing patternsCoinChangeDP
- O(nW) - Optimal coin combination problemEditDistanceDP
- O(nm) - String transformation operationsMatrixChainMultiplicationDP
- O(n³) - Optimal matrix multiplication orderSubsetSumDP
- O(nW) - Finding subsets with target sumFibonacciDP
- O(n) - Top-down, bottom-up, and space-optimized approaches
String Processing:
KnuthMorrisPrattAlgorithm
- O(n+m) - Efficient pattern matchingRabinKarpAlgorithm
- O(n+m) - Rolling hash pattern matchingZAlgorithm
- O(n) - String analysis and pattern findingLongestPalindromicSubstringAlgorithm
- O(n²) - Find longest palindromesManacherAlgorithm
- O(n) - Linear time palindrome detectionSuffixArrayAlgorithm
- O(n log n) - String indexing and searchTrieAlgorithm
- O(total length) - Prefix tree constructionAhoCorasickAlgorithm
- O(n+m+z) - Multiple pattern matchingStringCompressionAlgorithm
- 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 datasetsMergeSort
- O(n log n) - Stable, predictable performanceQuickSort
- O(n log n) avg - Fast general-purpose sortingHeapSort
- O(n log n) - Guaranteed performance, in-placeParallelMergeSort
- O(n log n) - Multi-core merge sort for large datasetsParallelQuickSort
- O(n log n) - Multi-core quick sort with work-stealing
Search Strategies:
LinearSearch
- O(n) - Works on unsorted dataBinarySearch
- O(log n) - Requires sorted dataParallelBinarySearch
- O(log n) - Multi-core binary search for very large arrays
Matrix Operations:
ParallelMatrixMultiplication
- O(n³) - Multi-core block-based matrix multiplicationParallelStrassenMultiplication
- O(n^2.807) - Divide-and-conquer matrix multiplication
Graph Algorithms:
ParallelBFS
- O(V + E) - Multi-core breadth-first searchParallelDFS
- O(V + E) - Multi-core depth-first search with work-stealingParallelConnectedComponents
- 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.