/**
* 位图排序,思想来自《编程珠玑》。<br>
* (功能详细描述)<br>
* @see 相关函数,对于重要的函数建议注释
* @since iNOC V200R003C00, 2012-2-20
* @param args
*/
public class BitSort
{
public static void main(String[] args)
{
generateRandom();
bitSort();
}
/**
*
* 生成随机数,并写入文件。<br>
* (功能详细描述)<br>
* @see 相关函数,对于重要的函数建议注释
* @since iNOC V200R003C00, 2012-2-21
*/
public static void generateRandom()
{
BufferedWriter writer = null;
Random random = new Random();
int num = 0;
StringBuilder nums = new StringBuilder();
for(int i = 0; i < 500000; i++)
{
num = random.nextInt(500000);
if(num > -1)
{
nums.append(num);
nums.append("\n");
}
}
try
{
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("random.txt")));
writer.write(nums.toString());
writer.flush();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
/**
*
* 读取文件的数据,排序,并写入另一个文件。<br>
* (功能详细描述)<br>
* @see 相关函数,对于重要的函数建议注释
* @since iNOC V200R003C00, 2012-2-21
*/
public static void bitSort()
{
BitSet bitSet = new BitSet(1000000);
try
{
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("random.txt")));
char[] buffer = new char[10000];
int bufferSize = -1;
StringBuilder nums = new StringBuilder();
while(-1 != (bufferSize = reader.read(buffer)))
{
nums.append(buffer, 0, bufferSize);
}
String[] tempNums = nums.toString().split("\n");
for(String num : tempNums)
{
bitSet.set(Integer.valueOf(num));
}
nums = new StringBuilder();
for(int i = 0; i < bitSet.length(); i++)
{
if(bitSet.get(i))
{
nums.append(i);
nums.append("\n");
}
}
BufferedWriter writer = null;
try
{
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("random2.txt")));
writer.write(nums.toString());
writer.flush();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
分享到:
相关推荐
实现位图排序,其中假设n为10 000 000,且输入文件包含1 000 000个正数;具体细节详见《编程珠玑》第一章问题; 由于数据的大小问题,在这#define N 1000,即数据在1000以内的100个数据,进行排序(当然由于随机数...
本文实例讲述了PHP实现bitmap位图排序求交集的方法。分享给大家供大家参考,具体如下: 初始化一串全为0的二进制; 现有一串无序的整数数组; 如果整数x在这个整数数组当中,就将二进制串的第x位置为1; 然后顺序读取这...
输入:一个最多包含n个正整数的文件,每个数都小于n,其中n=10^7,。如果在输入文件中有任何整数重复出现就是致命错误。没有其他数据与该整数关联。 输出:按升序排列的输入整数列表。 约束:最多有(大约)1MB的...
在《编程珠玑》一书里提到了一种算法导论里没有提到过的位图排序方法,这种排序方法是通过牺牲空间效率来追求时间效率(线性时间)以达到时间-空间折中与双赢的目的。本文以实例形式简单讲一下位图排序思想。 一、...
《Programming Pearls》(编程珠玑下载)第一章讲述了如何用位图排序无重复的数据集,整个思想很简洁,今天实践了下。 一、主要思想位图排序的思想就是在内存中申请一块连续的空间作为位图,初始时将位图的每一位都置...
本篇文章,小编将为大家介绍关于Java 位图法排序的使用方法,有需要的朋友可以参考一下
二分法排序算法 C语言实现 个人爱好 希望相互学习
#资源达人分享计划#
1、ListCtrl和HeaderCtrl支持共用位图底图,可以整个应用程序使用同一张完整底图图片,完美实现换肤等需要; 2、ListCtrl和HeaderCtrl支持独立位图底图,绘制背景时各自使用自己的独立底图; 3、ListCtrl和...
使用几种方法计算一个位图中出现频次最多的颜色
以前所接触到的位图的思想都是以1位的形式去存储某个数出现的次数是1次还是0次。常见的例子不外乎在《编程珠玑》上的开篇例子里,1千万个数的排序统计,用1.25M的内存空间就可以达到遍历一遍输入数据而排序好的目的...
代码实现了将彩色图像转换为矢量图形式的 SVG 文件,并保存。主要步骤如下: ...按照区域面积对区域进行排序。 将每个区域的轮廓向外扩展一定像素,并绘制模拟矢量图。 将绘制好的矢量图保存为 SVG 文件。
C#实现bitmap 高效地排序 标记存储
今天小编就为大家分享一篇关于海量数据去重排序bitmap(位图法)在java中实现的两种方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
针对大多数情况下可逆水印算法需要位图的情况,提出了一个不需要位图的可逆水印算法。该算法使用一种新的基于高效排序的全邻预测算法,经过排序以后形成预测误差集合,可以在很低失真度的情况下嵌入数据。实验的结果...
RCS在每个位图扇区内对字节重新排序,而不会影响属性。 如果在压缩之前应用RCS编码,则获得的压缩率应比通常至少好10%。 用法 要将RCS编码应用于文件,请使用命令行实用程序,如下所示: rcs Cobra.scr 这将生成...