algomate 0.3.1 copy "algomate: ^0.3.1" to clipboard
algomate: ^0.3.1 copied to clipboard

Algorithm strategy selection with sorting, search, graph, matrix, and benchmark utilities.

AlgoMate #

CI Pub Package Coverage License: MIT

AlgoMate is a Dart package for selecting and executing algorithm strategies from explicit input hints. It includes sorting, searching, graph, matrix, dynamic programming, string, and data-structure implementations behind one public library:

import 'package:algomate/algomate.dart';

Selection is heuristic: AlgoMate ranks applicable strategies from their metadata and SelectorHint. It does not guarantee that the selected strategy is the fastest choice for every machine or dataset.

เอกสารภาษาไทย

Requirements #

  • Dart >=3.0.0 <4.0.0
  • Android, iOS, Linux, macOS, web, and Windows are declared package platforms

Install #

dependencies:
  algomate: ^0.3.1

Then run:

dart pub get

Quick start #

import 'package:algomate/algomate.dart';

void main() {
  final selector = AlgoSelectorFacade.development();
  final input = [64, 34, 25, 12, 22, 11, 90];

  final result = selector.sort(
    input: input,
    hint: SelectorHint(n: input.length),
  );

  result.fold(
    (success) {
      print(success.output);
      print(success.selectedStrategy.name);
    },
    (failure) => print(failure.message),
  );
}

The built-in non-mutating sort strategies return a new list. Strategies that intentionally mutate input, such as InPlaceInsertionSortStrategy, document that behavior in their API.

Use a strategy directly #

Choose a concrete strategy when selection overhead or policy is not needed:

import 'package:algomate/algomate.dart';

void main() {
  final strategy = MergeSortStrategy();
  final input = [4, 1, 3, 2];
  final output = strategy.execute(input);

  print(output); // [1, 2, 3, 4]
  print(input);  // [4, 1, 3, 2]
}

Register a custom strategy #

Custom algorithms implement Strategy<I, O> and declare AlgoMetadata and canApply behavior. Register them with a matching StrategySignature:

import 'package:algomate/algomate.dart';

class DescendingSort extends Strategy<List<int>, List<int>> {
  @override
  AlgoMetadata get meta => const AlgoMetadata(
        name: 'descending_sort',
        timeComplexity: TimeComplexity.oNLogN,
        spaceComplexity: TimeComplexity.oN,
        description: 'Sort integers in descending order',
      );

  @override
  bool canApply(List<int> input, SelectorHint hint) => true;

  @override
  List<int> execute(List<int> input) => List<int>.from(input)
    ..sort((left, right) => right.compareTo(left));
}

void main() {
  final selector = AlgoSelectorFacade.development();
  selector.register<List<int>, List<int>>(
    strategy: DescendingSort(),
    signature: StrategySignature.sort(
      inputType: List<int>,
      tag: 'descending_int_sort',
    ),
  );
}

About the Parallel* APIs #

ParallelMergeSort, ParallelQuickSort, ParallelBinarySearch, ParallelMatrixMultiplication, ParallelStrassenMultiplication, ParallelBFS, ParallelDFS, and ParallelConnectedComponents retain their historical names for compatibility. Their current execute() methods are synchronous and do not spawn isolates. The package preserves the platform-specific constructors, types, metadata names, applicability rules, and fallbacks shipped in 0.3.0; native and web contracts are intentionally different.

Use these APIs for their current chunked, blocked, or divide-and-conquer semantics—not as evidence of multi-core execution. For new graph code that must compile unchanged across native, JavaScript, and Wasm, use BreadthFirstSearchStrategy<T> and DepthFirstSearchStrategy<T>. See the compatibility contract for the platform table.

Benchmarks #

The canonical runner measures strategies exported by the package. It records the commit and dirty state, Dart/OS/CPU details, seed, dataset sizes, warm-up, iterations, concurrency, raw samples, median, and P95 latency.

dart run tool/benchmark.dart \
  --iterations 80 \
  --warmup 10 \
  --seed 42 \
  --dataset random \
  --json benchmark/out/results.json \
  --csv benchmark/out/results.csv

Supported datasets are random, sorted, reverse, nearly-sorted, duplicates, and all. Results are machine-specific evidence, not fixed throughput guarantees.

See Benchmark guide.

Documentation #

Development #

Run the required gates from the repository root:

dart format --output=none --set-exit-if-changed .
dart analyze
dart test
dart run test/compile/native_0_3_0_contract.dart
dart compile js test/compile/web_0_3_0_contract.dart -o /tmp/algomate.js
node /tmp/algomate.js
dart compile wasm test/compile/web_0_3_0_contract.dart -o /tmp/algomate.wasm
git diff --check

For package metadata, public exports, SDK constraints, or release preparation, also run:

dart pub publish --dry-run

License #

AlgoMate is available under the MIT License.

3
likes
160
points
252
downloads

Documentation

Documentation
API reference

Publisher

verified publisherkidpech.app

Weekly Downloads

Algorithm strategy selection with sorting, search, graph, matrix, and benchmark utilities.

Repository (GitHub)
View/report issues
Contributing

Topics

#algorithms #sorting #searching #performance #optimization

Funding

Consider supporting this project:

github.com

License

MIT (license)

Dependencies

meta

More

Packages that depend on algomate