A Dart BK-Tree implementation for efficient nearest neighbor searches using Hamming distance, optimized for bulk file hash processing and duplicate detection.
Compatibility: Dart ^3.6.0
Method 1 (Recommended) With Dart:
dart pub add bk_tree
With Flutter:
flutter pub add bk_tree
Method 2
Add to pubspec.yaml
:
dependencies:
bk_tree: ^0.1.1
Then run:
dart pub get
import "package:bk_tree/bk_tree.dart";
void main() {
final tree = BKTree(
yourHashMap,
yourDistanceFunction,
);
final results = tree.search(
queryHash: yourQueryHash,
tolerance: n, // Your allowed n-bit difference
);
}
- Core Feature 1: Return a BK-Tree of a folder (using hamming distance)
final imageHashes = { "cat.jpg": "d3b07384d113edec", "dog.jpg": "c157a79031e1c40f", "cat_copy.jpg": "d3b07384d113edef", // Duplicate "landscape.png": "6f4b726212b23f0a", }; // Create BK-Tree with Hamming distance final tree = BKTree( imageHashes, hammingDistance, // Need from another place ); // Search for duplicates of cat.jpg final results = tree.search( queryHash: imageHashes["cat.jpg"]!, tolerance: 2, // Here allow 2-bit difference ); print("Duplicate findings:"); for (var match in results) { match.forEach((file, distance) { print("- Target: cat.jpg. Find match $file (distance: $distance)"); }); }
Output:
- Target: cat.jpg. Find match cat.jpg (distance: 0)
- Target: cat.jpg. Find match cat_copy.jpg (distance: 2)
# Run tests with coverage
dart test
- Fork repository
- Create feature branch:
git checkout -b feat/your-feature
- Follow Conventional Commits:
git commit -m "feat: add new validation method"
Follow the Effective Dart and analysis_options.yaml
BSD 3-Clause "New" or "Revised" License © 2025 RequieMa
Full text at LICENSE
Basic functionalities are done. (Current version is to support author's other packages)
More General Version is under development.
Please report issues via GitHub Issues