作者LPH66 (ha(ruhi|yate)ism)
看板Programming
标题Re: [问题] 一个分配的问题= =
时间Fri May 25 21:09:16 2007
※ 引述《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
1F:推 avhacker:没看清楚,原来不一定是32个 140.123.19.235 05/25 23:48