[Matroids](http://en.wikipedia.org/wiki/Matroid) and more generally, [greedoids](http://en.wikipedia.org/wiki/Greedoid), are special classes of hypergraphs. For these classes [greedy algorithms](http://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](http://books.google.co.uk/books?id=XicsNQIrC3sC&printsec=frontcover#v=onepage&q=&f=false), or 
* Jungnickel's book [Graphs, networks and algorithms](http://books.google.co.uk/books?id=oFeII9gMKx0C&printsec=frontcover#v=onepage&q=&f=false).