sortowanie plików na katalogi o zbliżonej wielkości

Podano posortowaną listę nazw plików formularza

{artist}-{title}.mp3

Chcę rozpowszechniać pliki na 255 pojemników (podkatalogów), tak aby każdy pojemnik zawierał w przybliżeniu taką samą liczbę plików, z zastrzeżeniem, że artyści są „atomowi”, tj. Żaden artysta nie powinien mieć utworów rozprowadzanych w więcej niż jednym katalogu. Wynik powinien być również posortowany (tj. Ignorując binning, nadal mamy ten sam porządek listy).

Co już próbowałem: podzielę listę na dokładnie 255 części tą metodą:

def partition(lst, n):
    q, r = divmod(len(lst), n)
    indices = [q * i + min(i, r) for i in range(n + 1)]
    result = [lst[indices[i]:indices[i + 1]] for i in range(n)]
    assert sum(len(x) for x in result) == len(lst)
    assert len(set(len(x) for x in result)) <= 2
    return result

A potem przechodzę i wymuszam ograniczenie, że artyści są atomowi, przenosząc je do poprzedniego kosza, jeśli mają już tam inny utwór. Ta metoda jest nieoptymalna i zepsuta, ponieważ pozostało mi dużo pustych pojemników (z powodu posiadania w niektórych przypadkach wielu utworów tego samego artysty)

questionAnswers(1)

yourAnswerToTheQuestion