Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/arthurkushman/go-hungarian
Hungarian algorithm to get optimal solutions of max/min on graph
https://github.com/arthurkushman/go-hungarian
algorithm bigraph go golang graph math
Last synced: 2 months ago
JSON representation
Hungarian algorithm to get optimal solutions of max/min on graph
- Host: GitHub
- URL: https://github.com/arthurkushman/go-hungarian
- Owner: arthurkushman
- License: mit
- Created: 2018-09-05T06:26:15.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2021-04-10T07:51:11.000Z (over 3 years ago)
- Last Synced: 2024-06-19T05:34:24.837Z (7 months ago)
- Topics: algorithm, bigraph, go, golang, graph, math
- Language: Go
- Size: 15.6 KB
- Stars: 8
- Watchers: 2
- Forks: 5
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# go-hungarian
Hungarian algorithm to get optimal solutions of max/min on bi-graph[![Go Report Card](https://goreportcard.com/badge/github.com/arthurkushman/go-hungarian)](https://goreportcard.com/report/github.com/arthurkushman/go-hungarian)
[![codecov](https://codecov.io/gh/arthurkushman/go-hungarian/branch/master/graph/badge.svg)](https://codecov.io/gh/arthurkushman/go-hungarian)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)Examples:
- find optimal maximum solutionsAs an example:
You have 10 professionals that can do some work in 10 days, choose 1 for each day that will do the work better, not interrupting with others.
```go
package mainimport "github.com/arthurkushman/go-hungarian"
func main() {
hungarian.SolveMax([][]float64{
{6, 2, 3, 4, 5},
{3, 8, 2, 8, 1},
{9, 9, 5, 4, 2},
{6, 7, 3, 4, 3},
{1, 2, 6, 4, 9},
})
/* this will result to
map[int]map[int]float64{
0: {2: 3},
1: {3: 8},
2: {0: 9},
3: {1: 7},
4: {4: 9},
}
*/
}
```- find optimal minimum solutions
For example:
You need to buy 12 equipment products for your factory in 12 months - each month prices are different (because of a seasons etc),
select most cheap prices for each product.
```go
package mainimport "github.com/arthurkushman/go-hungarian"
func main() {
hungarian.SolveMin([][]float64{
{6, 2, 3, 4, 5, 11, 3, 8},
{3, 8, 2, 8, 1, 12, 5, 4},
{7, 9, 5, 10, 2, 11, 6, 8},
{6, 7, 3, 4, 3, 5, 5, 3},
{1, 2, 6, 13, 9, 11, 3, 6},
{6, 2, 3, 4, 5, 11, 3, 8},
{4, 6, 8, 9, 7, 1, 5, 3},
{9, 1, 2, 5, 2, 7, 3, 8},
})
/* this will result in something similar to
map[int]map[int]float64{
0: {1: 2},
1: {4: 1},
2: {3: 5},
3: {7: 3},
4: {0: 1},
5: {2: 3},
6: {5: 1},
7: {6: 3},
}
*/
}
```### Benchmarks
| Benchmark name | Total Repetitions | Single Repetition Duration (ns/op)
| :--- | :---: | :---: |
| BenchmarkSolveMax8x8-4 | 50000 | 24754 |
| BenchmarkSolveMax10x10-4 | 30000 | 44627 |
| BenchmarkSolveMax12x12-4 | 20000 | 62984 |
| BenchmarkSolveMin8x8-4 | 30000 | 53301 |
| BenchmarkSolveMin10x10-4 | 10000 | 131101 |
| BenchmarkSolveMin12x12-4 | 10000 | 183518 |