我被问到以下
There are X number of compressed files of different sizes in a single folder.
Where X is 1 to 250.
File size ranges from 1MB to 65MB. The compression ratio varies from 9 to 11.
There are Y number of parser threads. Where Y is between 1 to 8.
Write an application that distributes the files so each thread receives the same amount of data ( or as close as possible ).
Please follow all best coding practices and standards you are familiar with.
For example
If X is 5 and Y is 3 and the files are
File 1 is 1MB, File 2 is 2MB, File 3 is 3MB, File 4 = 4MB, File 5 = 5MB.
Uncompressed File 1,2,5 = compressed file * 9. Files 3,4 = compressed file * 10
Output
Thread <thread number> = Files <file number...> = <total size of all files uncompressed>
...
Data skew = ((max size - min size) / max size ) * 100
我是否正确地认为这是一个不可能回答的问题,看起来很模糊。在我看来,这是一个非常难以在1小时内回答的问题。
我认为这种分配是非常重要的。
修改
我所知道的问题是上面所说的。
对我而言,这似乎是一个非常含糊的问题。
答案 0 :(得分:0)
所以,根据我的评论,我认为这是传统Bin Packing Problem的一个实例,除了在这种情况下,你有一定数量的箱子(线程)提前知道并且箱子可以增长,这需要一些计算。可以把它想象成有X个盒子,你必须填充Y个项目,但盒子可以更高。
首先,我认为您需要预先计算未压缩的文件大小。未压缩的文件大小类似于bin打包问题中的“卷”。
接下来,我认为您可以根据未压缩的值对文件进行排序。这样可以更快地搜索列表。
为了实际将它们分类,请将bins视为bin包装问题中的“bins”。我认为有很多方法可以做到这一点,在我确定一个特定方法之前我会遇到的一个问题是:你是否更关心首先使用所有线程,但是让它们彼此接近彼此大小可能,或者你是否更关心如何尽可能接近结果尺寸,你只是不能使用超过规定的线程?
如果关注的是使用所有线程,我认为我的方法看起来像:
如果关注的是大小匹配,那么我的方法会有些不同。
这里的好处是我认为你会得到一个非常均匀的分布,因为你总是保持“箱子”尽可能接近彼此的大小。问题是它关注箱子的大小而不是全部使用它们。