問題:
有個(gè)鏈表(List),有N個(gè)元素,當(dāng)N很大的時(shí)候,我們通常想分批處理該鏈表。假如每次處理M條(0<M<=N),那么需要處理幾次才能處理完所有數(shù)據(jù)呢?
問題很簡(jiǎn)單,我們需要<N/M>次,這里我們用<>表示向上取整,[]表示向下取整,那么怎么來表示這個(gè)值呢?
我們可以證明:
<N/M>=[(N-1)/M]+1 (0<M<=N,M,N∈Z)
不失一般性,我們?cè)O(shè)N=Mk+r(0<=r<M),
1)當(dāng)r>0時(shí),
左邊:<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)當(dāng)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
命題得證。
有了這個(gè)公式,我們?cè)贘ava代碼里可以這樣計(jì)算:
int nn=(N-1)/M +1
.
因?yàn)?/'是往下取整的。