有几十万条记录,分文件夹存放,以万为单位,1到10000存入一个文件夹,10001到20000一个文件夹...以此类推,,,,文件夹下面又分(1---5000),(5001---10000)
(1---5000),又分(1---2500),(2501-50000)现在就求高手指点一下,这个算法应该怎么写,
比如:一个文件是165,我怎么知道它应该放在那个文件夹下面呢?
文件夹(1---10000)
| |
(1---5000) (5001---10000)_____
| |
(1---2500) (2501---5001) (5001---7500) (7501---10000)
(1---5000),又分(1---2500),(2501-50000)现在就求高手指点一下,这个算法应该怎么写,
比如:一个文件是165,我怎么知道它应该放在那个文件夹下面呢?
文件夹(1---10000)
| |
(1---5000) (5001---10000)_____
| |
(1---2500) (2501---5001) (5001---7500) (7501---10000)
这样一直二分下去?最小分到多少呢?
当不能被2整除时怎么办 ?如果只是分到2500的话
那int i=165 //需要查找的文件号
int d=i%2500;
int D3=i-d+1;int D4=i-d+2500;//D3-D4就是最后一层目录 1-2500;如果不考虑效率的话
d=i%5000;
D3=i-d+1;D4=i-d+5000;//D3-D4是第二层目录 1-5000d=i%10000;
D3=i-d+1;D4=i-d+10000;//D3-D4是第二层目录 1-10000
int s[] = {40000,20000,10000,5000,2500,1250,625};
String path="";
String path2="";
int endFlag = 0;
for(int i=s.length - 1; i>0; i--){
if(endFlag == 0)
{
int n = s[i-1] / s[i]; //同级子目录数
for(int j=1; j <= n; j++){
if(a <= s[i] * j){
path2 = "" + s[i] * j;
endFlag = 1;
break;
}
}
}
if(!path2.equals("") && Integer.valueOf(path2).intValue() != (s[i-1]))
path = s[i - 1] + "\\" + path;
}
return path + path2;
}
10000,5000,2500,1250,625那么:
第一层:1650/10000 < 1 ,所以在第0 个如果文件夹
第二层:1650/5000 <1 ,所在在第0个
第三层:1650/2500 <1 ……
第四层:1650/1250 <2 所在第 1 个
第五层:1650/625 <3 ,那么在第二个由此:
应该在 0_10000\0_5000\0_2500\1251_2500\1251_1875\1650.file
建立一个方法:
private String 获得路径(int 文件编号,int[] 划分规则)
{
StringBuffer path = new StringBuffer();
for(int i=0; null!=划分规则 && i<划分规则.length; i++)
{
int p = (int)(文件编号/划分规则[i]);
path.append(划分规则[i]*p+1);
path.append("_");
path.append(划分规则[i]*(p+1));
path.append("\\");
}
path.append(文件编号+".file");
return path.toString();
}纠正:1_10000\1_5000\1_2500\1251_2500\1251_1875\1650.file