E81086713E446D36F62B2AA2A3502B5EB155

Java杂家

杂七杂八。。。一家之言

BlogJava 首页 新随笔 联系 聚合 管理
  141 Posts :: 1 Stories :: 174 Comments :: 0 Trackbacks
问题:
有个链表(List),有N个元素,当N很大的时候,我们通常想分批处理该链表。假如每次处理M条(0<M<=N),那么需要处理几次才能处理完所有数据呢?

问题很简单,我们需要<N/M>次,这里我们用<>表示向上取整,[]表示向下取整,那么怎么来表示这个值呢?
我们可以证明:
<N/M>=[(N-1)/M]+1    (0<M<=N,M,N∈Z)

不失一般性,我们设N=Mk+r(0<=r<M),
1)当r>0时,

左边:<N/M>=<(Mk+r)/M>=<k+r/M>=k+<r/M>=k+1
右边:[(N-1)/M]+1=[(Mk+r-1)/M]+1=[k+(r-1)/M]+1=k+1+[(r-1)/M]=k+1
2)当r=0
左边:<N/M>=k
右边:[(N-1)/M]+1=[(Mk-1)/M]+1=[(M(k-1)+M-1)/M]+1=[k-1+(M-1)/M]+1=k+[(M-1)/M]=k

命题得证。

有了这个公式,我们在Java代码里可以这样计算:
int nn=(N-1)/+1
.


因为'/'是往下取整的。








posted on 2009-05-04 11:45 DoubleH 阅读(3958) 评论(4)  编辑  收藏 所属分类: Memorandum

Feedback

# re: 向上取整的一个应用 2009-05-04 13:17 重庆理工小子

LZ介绍了一下数学的证明题哈,不错不错!
另也可直接可以用 Math.ceil()函数向上取整哦   回复  更多评论
  

# re: 向上取整的一个应用[未登录] 2009-05-04 14:41 DoubleH
Math.ceil返回double类型。。这个公式只对正整数的情况,简单明了点  回复  更多评论
  

# re: 向上取整的一个应用 2010-12-27 18:06 JALY
hehe.不错哈  回复  更多评论
  

# re: 向上取整的一个应用 2014-08-31 12:12 上海码农
当N等于0的时候貌似不成立  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: