ファイルがあり、それを最大 N 個の小さなファイルに分割する必要があり、最小のチャンクには少なくとも X バイトが必要であり、すべてのファイルが (ほぼ) 同じサイズである必要があるとします。
たとえば、N=4 で X=3 の文字列 'abcdefghij' を使用すると、['abcd', 'efg', 'hij'] が返されます。
3 chunks < 4 chunks
4 chars > 3 chars
x
分割関数を作成しましたが、余分な文字列が 1 つ作成されることがあるため、そこで計算する代わりに値を渡す必要があります。
def split(string, n):
x = len(string)//n
return [string[i:i+x] for i in range(0, len(string), x)]
本当の問題は、最小バイト数でファイルをカットするためのチャンク数を計算する方法です。
def calculate(length, max_n, min_x):
n, x = ...
return n, x
この種のアクションを実行するための単純な既知のアルゴリズムはありますか?
実際には、チャンクの数を最大化したいので、ファイルが 1 バイト異なる必要はありません。