A comprehensive, fast, and extensible algorithms library for Rust. Includes classic and modern techniques for lists, sets, maps, strings, graphs, and more — built with idiomatic Rust, strong typing, and clean APIs.
- Actively maintained with ambitious roadmap (1,000+ algorithms planned)
- Type-safe generics across the library
- Readable, idiomatic Rust code with clear documentation and tests
Environment: Rust 1.70+ (see Cargo.toml
).
Add to your Cargo.toml
:
[dependencies]
pofk_algorithm = "0.0.1"
use pofk_algorithm::*;
use pofk_algorithm::{
list_algorithms::{binary_search, merge_sort},
string_algorithms::{is_palindrome, longest_common_prefix},
graph_algorithms::{dijkstra, WeightedEdge},
};
fn main() {
// List algorithms
let arr = vec![1, 3, 5, 7, 9];
let idx = binary_search(&arr, 7);
let sorted = merge_sort(vec![5, 2, 4, 6, 1, 3]);
// String algorithms
let is_pal = is_palindrome("A man a plan a canal Panama");
let lcp = longest_common_prefix(&["flower", "flow", "flight"]);
// Graph algorithms
let graph = vec![
("A", vec![WeightedEdge::new("A", "B", 1), WeightedEdge::new("A", "C", 4)]),
("B", vec![WeightedEdge::new("B", "C", 2)]),
("C", vec![]),
].into_iter().collect();
let dist = dijkstra(&graph, "A");
println!("{:?}", (idx, sorted, is_pal, lcp, dist));
}
- binary_search, linear_search
- merge_sort, quick_sort, bubble_sort, insertion_sort, selection_sort
- counting_sort (non-negative ints)
- reverse_list, find_max_min, find_duplicates, remove_duplicates
- kadanes_algorithm
- max_sum_subarray_of_size_k, min_sum, average_subarray, prefix_sum, two_sum_sorted
- rotate_array_right
- has_duplicates, has_two_sum, has_unique_window
- disjoint_set (Union-Find), find_intersection, set_difference, is_frequency_unique
- frequency_count, most_frequent_element, top_k_frequent
- group_by_key, first_non_repeated_element
- anagram_checker (generic list-based)
- two_sum (indices), lru_cache, length_of_longest_substring
- reverse_string, palindrome_checker, anagram_checker
- brute_force_search, kmp_search, rabin_karp_search
- longest_common_prefix, longest_palindromic_substring
- edit_distance, string_compression, count_vowels_consonants
- bfs, dfs, topological_sort
- connected_components, cycle_detection (directed/undirected), bipartite_graph
- shortest_path (unweighted BFS), weighted_edge (utility)
- dijkstra, bellman_ford, floyd_warshall
- mst_kruskal, mst_prim
- kosaraju_scc, articulation_points, union_find (typedef)
Each function includes Dartdoc with usage and time/space complexity.
- Import everything via use
pofk_algorithm::*;
- Sorting/searching functions use
T extends Comparable
where appropriate. - Weighted graph utilities use
WeightedEdge<T>
. - Algorithms are pure and side-effect free unless documented otherwise.
cargo test
All tests pass in the repository (see test/
).
Contributions are welcome!
- Add new algorithms or optimize existing ones
- Improve docs and examples
- Increase test coverage
Open a PR with a brief description and test cases.
- Expand graph algorithms (SPFA, Johnson, Edmonds-Karp, Dinic)
- Add tree/heap/DP/geometry modules
- Benchmarks and performance docs
MIT. See LICENSE
.