算法 - 如何在p波段上放置n文本,以便全局访问时间最短。每个文字都有它的'自己的长度

时间:2016-11-07 17:02:48

标签: algorithm greedy

这个问题听起来像是这样,我们会收到n-texts文件,他们会被放在ap数量的录音带/乐队上(不知道英语中的等价物是什么,但我认为你理解我在说什么。

为了读取位于其中一个波段上位置k的文本,我们必须从特定波段的1,2,...,k位置读取文本。每个文字都有它的'自己的长度。

现在,我们必须找到一种方法将文本放在p波段上,这样我们就可以获得最小的全局访问时间。通过添加每个频段的所有总访问时间来计算全局访问时间。

计算频段总访问时间的公式为:

n_
 \  [L(T1)+L(T2)+...+L(Ti)]
 /_    
i=1
  

现在,我做的那张小画是从1到n的SUM;

     

L(T i)是T i的长度;

     

T i是位于相应频段的位置i的文本;

这是"伪代码"如果它有帮助:

n-number of texts;
Band[n]-array of texts
sum=0, sum2=0; 
for(int i=0;i<n;i++)
    {sum=0;
    for(int j=0;j<=i;j++ )
        sum=sum+Band[j].length;
    sum2=sum2+sum; }
return sum2;

以下是澄清问题的示例:

say p is 3, so we get 3 bands
say n is 9, so we get 9 texts and the lengths are : 2, 3, 4, 5, 6, 7,   8,  9, 10 
and they are placed on the bands in the following way:
  

band-1:2,5,8-&gt;频段-1:24的总访问时间

     

带-2:3,6,9->频段-2:30的总访问时间

     

band-3:4,7,10-&gt;频段-3:36的总访问时间

     

全球访问时间:24 + 30 + 36 = 90

1 个答案:

答案 0 :(得分:1)

我将文本位置称为磁带中特定文本之后出现的文本数量,它还表示文本将被读取多少次。

由于您只对访问时间的总和感兴趣,因此对于如何将文本分组到磁带中没有实际意义,但是每个文本的位置是什么,将2个文本切换到相同的位置但是在不同的磁带上,例如赢了t更改全局访问时间。 在不同的位置切换2个不同大小的文本会改变时间,通常较长的文本应放在较低的位置(靠近末尾)

算法可以是贪婪的,从最长到最短的文本遍历,并将每个文本放在其中一个带有最少文本的磁带上的最后一个可用位置,因此,例如,如果有10个文本和5个然后,磁带将在每个磁带的末尾放置5个较长的文本,而较短的5个文本将放在磁带的开头。