【算法】堆的应用

来源:互联网 发布:小学女生内衣淘宝 编辑:程序博客网 时间:2024/05/24 06:36
 

个文件中包含了1亿个随机整数,如何快速的找到最大(小)的100万个数字?这类问题其实就是“优先树”算法,用堆(Heap)很容易解决。首先用含100万个数字的数组组成堆。从文件间读取数字,并插入到Heap中。如果 Heap已经满了,则删除根节点,并重整;直到所有的数字均处理完毕。

堆排序是Heap的副产品,其实它大部分时间是用在“优先决策”上,上面的例子只是其中之一,其他场所比如操作系统的任务调用、优先队列等。

  1. public static Comparable[] findMin(int count, String fileName) {
  2.   Heap heap = new Heap(count);
  3.   try {
  4.     BufferedReader br = new BufferedReader(new FileReader(fileName));
  5.     String line;
  6.     while((line = br.readLine()) != null) {
  7.       Integer number = Integer.valueOf(line);
  8.       if(heap.isFull())
  9.         heap.delete();
  10.       heap.insert(number);
  11.     }
  12.   } catch (FileNotFoundException e) {
  13.     e.printStackTrace();
  14.   } catch (NumberFormatException e) {
  15.     e.printStackTrace();
  16.   } catch (IOException e) {
  17.     e.printStackTrace();
  18.   }
  19.   Comparable[] ret = new Comparable[count];
  20.   int index = count - 1;
  21.   while(!heap.isEmpty()) {
  22.     ret[index--] = heap.delete();
  23.   }
  24.   return ret;
原创粉丝点击