[Matroids](https://en.wikipedia.org/wiki/Matroid) and more generally, [greedoids](https://en.wikipedia.org/wiki/Greedoid), are special classes of hypergraphs. For these classes [greedy algorithms](https://en.wikipedia.org/wiki/Greedy_algorithm) give optimal solutions for optimization problems, and have low polynomial time complexity. Special cases are * Kruskal's algorithm for finding minimal spanning trees, and * Dijkstra's algorithm for finding shortest paths, both in weighted graphs. There are many other matroid algorithms. See for example * Bixby and Cunningham's chapter in [the Handbook of Combinatorics, volume 1](https://books.google.co.uk/books?id=XicsNQIrC3sC&printsec=frontcover#v=onepage&q=&f=false), or * Jungnickel's book [Graphs, networks and algorithms](https://books.google.co.uk/books?id=oFeII9gMKx0C&printsec=frontcover#v=onepage&q=&f=false).