Рассмотрим следующий снимок экрана:
![enter image description here](https://i.stack.imgur.com/AEx12.png)
Предположим, мы знаем эту информацию о наших элементах collectionView и максимальной ширине каждой строки:
let maxRowWidth = UIScreen.main.bounds.width - 40//the width of the screen minus the collectionView insets
let items = [(text: "Lululemon", width: 98.955), (text: "boots", width: 67.47), (text: "sweaters", width: 89.61), (text: "Gymshark", width: 96.72), (text: "Free People", width: 110.325), (text: "dress", width: 66.18), (text: "air force 1", width: 93.53999999999999), (text: "Athleta", width: 77.205), (text: "dresses", width: 81.6), (text: "Brandy Melville", width: 131.49), (text: "Princess Polly", width: 121.41), (text: "formal dress", width: 111.88499999999999), (text: "jeans", width: 65.265), (text: "booties", width: 79.365), (text: "Ray-Ban", width: 84.78), (text: "cheetah print", width: 117.61500000000001), (text: "skirt", width: 57.975), (text: "mom jeans", width: 102.31499999999998), (text: "Revolve", width: 82.57499999999999), (text: "Patagonia", width: 96.27)]
let horizontalSpaceBetweenItems:CGFloat = 9
Я пытаюсь придумать алгоритм, который позволит мне сортировать элементы таким образом, чтобы я мог минимизировать количество пустого пространства для каждой строки. Например, на скриншоте, если я поменяю «джинсы» на «Эти три бутика», то у 4-й строки будет меньше свободного места.
Как найти перестановку массива items
таким образом, чтобы в collectionView было наименьшее количество пустого пространства?
Я уверен, что для этого сценария существует подходящий алгоритм, но я не уверен, где искать.