2016-11-07 11 views
1

這個問題聽起來像這樣,我們給了n個文本,他們將被放置在一些磁帶/樂隊(不知道什麼是英文的等價物,但我認爲你明白我在說什麼)。算法 - 如何在p波段上放置n個文本,以使全局訪問時間最短。每個文本都有自己的長度

爲了讀取位於其中一個帶上的位置k處的文本,我們必須從特定帶上的位置1,2,...,k讀取文本。每個文本都有自己的長度。

現在,我們必須找出一種將文本放在p波段上的方法,這樣我們就可以獲得最小的全局訪問時間。全球接入時間通過將每個頻帶的所有總接入時間相加來計算。

用於計算帶的總accesing時間的公式爲:

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

現在,小圖我所做的是從1到n SUM; (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: 

帶1:2,5 ,8 - >第一帶的總接近時間:24

帶-2:3,6,9 - >帶-2的總接入時間:30

帶3:4,7,10 - 帶3的>總accesing時間:36

全球accesing時間:24 + 30 + 36 = 90

回答

1

我將把以文本位置作爲在磁帶中的特定文本之後出現的文本的數量,它還表示文本被讀取多少次。

由於您只對訪問時間的總和感興趣,因此如何將文本分組到磁帶中,但是每個文本的位置是什麼,在同一位置切換2個文本,但在不同的磁帶上,例如,不會改變全球訪問時間。 雖然在不同位置上切換2個不同大小的文本會改變時間,但通常較長的文本應該放在較低的位置(更接近尾端)

該算法可以是貪婪的,可以從最長的文本到最短並將每個文本放在其中一個帶有最少文本的磁帶上的最後一個可用位置,所以如果例如有10個文本和5個磁帶,則較長的5個文本將位於每個磁帶的末尾,而較短的5個文本將在它的開頭。

+0

我不認爲這是最好的方法去做,因爲如果你先放置較長的文本,那麼它們將在每次迭代中被考慮,但是如果你將它們放在最後,它們將被考慮到只有一次。我認爲解決這個問題的最好方法與你所說的相反,把小文本放在第一位,最大的文本放在最後。 –

+0

是的,我寫信將每段文字放在錄音帶前面,我會盡量讓它更清晰 –

相關問題