Re: [問題] 一個分配的問題= =
※ 引述《Rokund (....)》之銘言:
: 最近遇到一個分配的問題,本來以為很簡單,事實上應該也是很簡單
: 但我想了好久= =,最後是有想出來,覺得很有趣,給大家參考
: 問題:
: 假設原本有32個值,分給5個陣列,因為沒辨法整除,因此採取以下做法
: 32/5=6 餘 2
: 所以每個陣列的大小分別給他7, 7, 6, 6, 6
: 也就是說,多出來的平均分配給前面的陣列,所以後面的陣列比較小
: 而且一定要前面的值分給前面的陣列,不是像發牌那種分法
: 那要怎麼把原本32個值對應到每個陣列
: 也就是說
: 原值索引 -> 目的陣列索引
: 0 -> 0
: .
: .
: 6 -> 0
: 以此類推
: 7 -> 1
: 13 -> 1
: 14 -> 2
: 19 -> 2
: 20 -> 3
: 25 -> 3
: 26 -> 4
: 31 -> 4
: 當我們得到一個「原值索引」也知道6餘2,要怎麼以簡單判斷和計算式,
: 也就是不需由0開始算,要怎麼求得「目的陣列索引」?
: 上面只是舉例,當然有可能是整除或餘3餘4等等...
: 剛因為舉的例子不好,故重貼
我的想法是這樣:
設大陣列全部有n個元素 分到k個陣列 其中n除以k為q餘r (也就是已知的參數是q和r)
因此k個陣列中 前r個有q+1個元素 其餘k-r個有q個元素
因此 大陣列由[0]到[r(q+1)-1]的部份是簡單的每q+1個一組
因此 if(index<r*(q+1)) {arrayNo=index/(q+1); subIndex=index%(q+1);}
[r(q+1)]到[n-1]的部份 把它平移r(q+1)個元素
讓[r(q+1)]變成(假設的)新[0] 這個(假設的)新大陣列分組法是簡單的每q個一組
於是分組後 原r號陣列變成新0號陣列
於是就有 else {arrayNo=(index-r*(q+1))/q+r; subIndex=(index-r*(q+1))%q;}
^^^^^^^^^^^^^ ↑↑
平移成新大陣列索引 ││
求新陣列號碼│
反求原陣列號碼
(上面兩個除法都是整數除法 即餘數丟掉)
--
主要思路是把不一樣的切開
因為我們知道全部一樣時要怎麼做
原題切開後兩部份都是已知的做法 套用即可
--
[LPH] Oops, your OOP's a problem? 說:
你現在還是看不到狗?
************* 說:
看得到 只是 他們不會跑 就一直呆呆在那邊 一直在起點
[LPH] Oops, your OOP's a problem? 說:
你要按"ㄅㄧㄤˋ"它們才會跑啊@@"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 192.192.197.117
推
05/25 23:48, , 1F
05/25 23:48, 1F
討論串 (同標題文章)