青海医院网站的建设,赤峰浩诚网站建设公司能提供哪些服务?

摘要:青海医院网站建设公司,赤峰浩诚网站建设公司,纪念馆网站建设方案,中国建设人才网信息网证书是假的吗一、手动改写堆(非常重要)!系统提供的堆无法做到的事情
青海医院网站建设公司,赤峰浩诚网站建设公司,纪念馆网站建设方案,中国建设人才网信息网证书是假的吗一、手动改写堆#xff08;非常重要#xff09;#xff01;系统提供的堆无法做到的事情#xff1a;1#xff09;已经入堆的元素#xff0c;如果参与排序的指标方法变化#xff0c;系统提供的堆无法做到时间复杂度O(logN)调整#xff01;都是O(N)的调整#xff01;2非常重要系统提供的堆无法做到的事情1已经入堆的元素如果参与排序的指标方法变化系统提供的堆无法做到时间复杂度O(logN)调整都是O(N)的调整2系统提供的堆只能弹出堆顶做不到自由删除任何一个堆中的元素或者说无法在时间复杂度O(logN)内完成一定会高于O(logN)根本原因无反向索引表二、加强堆的核心点1建立反向索引表indexMap2建立比较器3核心在于各种结构相互配合非常容易出错三、构建加强堆演示package class07;import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.List;/*** 手写一个加强堆比系统自带的优先队列多了更多高效的获取元素查询动作* 注意泛型T一定要是非基础类型有基础类型需求包一层*/ public class HeapGreaterTrainT {//保存堆元素的集合public ArrayListT heap;//保存堆元素对应的索引位置 元素索引public HashMapT, Integer indexMap;//堆大小public int heapSize;//比较器自定义的比较器 ?匹配类型是T的父类 包括T本身public Comparator? super T comp;public HeapGreaterTrain(Comparator? super T c) {heap new ArrayList();indexMap new HashMapT, Integer();heapSize 0;comp c;}//判断堆是否为空public boolean isEmpty() {return heapSize 0;}//判断堆大小public int size() {return heapSize;}//判断堆中是否包含某个元素public boolean contains(T obj) {return indexMap.containsKey(obj);}//查询堆顶元素public T peek() {return heap.get(0);}//入堆操作public void push(T obj) {//直接进集合最后反向索引表创建关系后面再接着insert向上排序heap.add(obj);indexMap.put(obj, heapSize);heapInsert(heapSize);}//堆向上交换操作默认是小根堆的排序private void heapInsert(int i) {//通过业务创建加强堆自定义的比较器来定义排序假设返回小于0执行交换操作while (comp.compare(heap.get(i), heap.get((i - 1) / 2)) 0) {swap(i, (i - 1) / 2);i (i - 1) / 2;}}//出堆操作public T pop(){//出堆顶然后与最后一个元素交换再将最后一个元素从集合与反向索引表删除T ans heap.get(0);swap(0,--heapSize);heap.remove(heapSize);indexMap.remove(ans);heapify(0);return ans;}//堆向下沉操作 默认小根堆public void heapify(int i) {int left i *2 1;while(left heapSize){int smallest left1 heapSize comp.compare(heap.get(left1),heap.get(left))0?left1:left;smallest comp.compare(heap.get(smallest),heap.get(i))0?smallest:i;if(smallest i) break;swap(smallest,i);i smallest;left i *21;}}//移除任意一个元素 将最后一个元素交换到该元素位置然后再从该位置进行堆的上下调整排序操作public void remove(T obj){//获取集合中最后一个元素T end hea
阅读全文