https://github.com/limitedeternity/knapsack
Просто рюкзаки. Разные: ограниченные и неограниченные
https://github.com/limitedeternity/knapsack
bounded-knapsack-problem knapsack-problem knapsack-solver unbounded-knapsack
Last synced: 12 months ago
JSON representation
Просто рюкзаки. Разные: ограниченные и неограниченные
- Host: GitHub
- URL: https://github.com/limitedeternity/knapsack
- Owner: limitedeternity
- License: mit
- Created: 2024-04-18T16:53:35.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-04-25T15:24:59.000Z (almost 2 years ago)
- Last Synced: 2025-01-21T07:09:29.097Z (about 1 year ago)
- Topics: bounded-knapsack-problem, knapsack-problem, knapsack-solver, unbounded-knapsack
- Language: Go
- Homepage:
- Size: 111 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# knapsack
> Просто рюкзаки. Разные: ограниченные и неограниченные
## Cборка:
1. Нужен Go 1.22
2. Просто `go build`, и всё
## Использование:
```powershell
❯ .\knapsack.exe -h
Options:
-h, --help Display help information
-i, --items *Yaml file with an array of items
-c, --capacity *Knapsack capacity
-k, --knapsack[=bounded] Knapsack type
```
* Через `-i` указывается путь до .yaml-файла со списком предметов, которые нужно попробовать впихнуть в рюкзак (см. [items.yaml](https://github.com/limitedeternity/knapsack/blob/master/items.yaml))
* Через `-c` задаётся ёмкость рюкзака, в которую надо вписаться
* Через `-k` можно указать, какой тип рюкзака использовать: ограниченный (`bounded`; по-умолчанию) или неограниченный (`unbounded`)
## Схема items.yaml:
* `item`: `string` (required; название предмета)
* `weight`: `integer` (required; вес предмета)
* `value` : `integer` (required; ценность предмета)
* `pieces`: `integer` (optional; количество единиц предмета)
Поле `pieces` нужно для ограниченного рюкзака, неограниченному на него всё равно.
Если его не указать для ограниченного рюкзака, то поле примет значение по-умолчанию (`1`), и будет решаться задача про рюкзак 0/1.
## Пример:
```powershell
❯ .\knapsack.exe -i items.yaml -c 8
Taking:
+ 2m: 1
+ 6m: 1
Total value: 22
Total weight: 8
```
Да, это Rod Cutting, самый первый тест-кейс.