`
杨杨和花花
  • 浏览: 22434 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于优先队列和hash的简介

阅读更多
关于优先队列和hash的简介
一.优先队列的引入
  JDK API中的定义如下:一个基于优先级堆的无界优先级队列。优先级队列的元素按照其自然顺序进   行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。优先    级队列不允许使用 null 元素。依靠自然顺序的优先级队列还不允许插入不可比较的对象;
  1》add(),的方法:将指定的元素插入到队列中
     这个方法的好处在于,它会自动增加队列的长度。
  2》clear(),的方法:从此队列中移除所有元素
  3》offer() :将指定的元素插入此优先级队列
  4》peek()和poll()的区别;前者获取但不移除头元素,后者获取但会移除头元素。二者对于空队     列,都会返回一个null;
  至于其它的方法,文档中有很清晰的介绍。
二.自己对于优先队列的看法
  如果像文档那样实现各种方法,则需要写很多相关的类。其实我们可以通过一个简单的例题,来表  达其基本的操作。
  例:给你很多的数,让你选出其中的10个最大的数。这里很多我们就以100进行量化、
     以下是代码的具体实现:
  public class MyListQueen {
int s[]=new int[10];
    /**
     *
     * @param a  你要排序的数组
     * @return   排好序的数组
     */
    public void chushi(int a[]){
    for(int i=0;i<a.length;i++){
    for(int j=i+1;j<a.length;j++){
    //进行交换
    if(a[i]>a[j]){
    int t=a[i];
    a[i]=a[j];
    a[j]=t;
    }
    }
    }
    for(int k=0;k<10;k++)
    s[k]=a[k];
    }
    /**
     *
     *  添加元素进行排序的
     */
    public void addNode(int x,int i,int j){
    if(j-i<=1){
    for(int k=0;k<i;k++)
    s[k]=s[k+1];
    s[i]=x;
        return;
    }
    int middle=(i+j)/2;
    if(x<s[middle])
    addNode(x,i,middle);
    else if(x>s[middle])
    addNode(x,middle,j);
    }
    /**
     * 打印的方法
     */
    public void Systemlist(){
    for(int i=0;i<s.length;i++){
    System.out.print(s[i]+",");
    }
      }  
    }
      一个主类来运行
  

   import java.util.Random;

   public class TestList2 {
  public static void main(String args[]){
MyListQueen list=new MyListQueen();
int a[]=new int[10];
Random random=new Random();
for(int i=0;i<10;i++){
a[i]=random.nextInt(100);
}
//初始数组
list.paixu(a);
//加入新的元素
for(int j=0;j<100;j++)
list.addNode(random.nextInt(100), 0, 10);//进行优先选择
list.Systemlist();  //打印数据

   }

    }
   我是通过一个固定数组来保存需要的数据,当然你也可以通过固定结点的树来进行优先选择。
   当然该问题实际上含有几个变量的。以上是选择最大的数,你也可以选择最小的数。选择的数的数   量也是一个变量。还有从多少数中选择等等。
三.hash结构的深度认识
     有人会问,hash的结构是什么样?在我的脑海中,我可以形象的用一个数组加一个链表来描述。数组存放K值,链表并行的放那些具有相同K值的对象。
     在这个结构中,时常会听见一些术语。
  hash函数:其作用,相当于一个算法规则。给了相应的k值,你就可以通过hash函数求出对应的V值。它是该结构的逻辑支撑。也是产生该结构的 充要条件、(或许有更加精确的解释)
     阀值:每个数组对应的链表长度(这是我的理解);
     冲突:对于不同的关键字可能得到同一哈希地址,即Key1不等于Key2,而f(Key1)=f(Key2),这种现象称冲突、具有相同函数值的关键字对该哈希函数来说称做同义词。
     哈希函数的构造方法:
  1.直接定址法
           取关键字或关键字的某个线性函数值为哈希地址。即:
          H(key)=Key或H(key)=a*Key+b;
           其中a和b为常数(这种哈希函数叫做自身函数).
  2.数字分析法
           取数据元素关键字中某些取值较均匀的数字位作为哈希地址的方法。
           等等构造方法,其实去网上我们都可以看到的。这里就不多说。一直想寻求hash表的应用,看了一些,感觉都是很抽象。要说就我所知道,hash表在查找上的应用较为突出。
     构造一个hash表,通过hash函数,确定k值和存储地址的关系。通过这个关系,我们可以不通过比较就可以快速的查找出你需要的元素。
    还有许多的方法,你可以通过百度了解。   
 
分享到:
评论

相关推荐

    广搜队列结点类 广搜队列结点类 广搜队列结点类

    - `q` 和 `r`:分别用于记录队列的头指针和尾指针。 - `quene[]`:数组形式的队列,用于存储待处理的节点。 - `n` 和 `m`:分别表示网格的行数和列数。 - `map[][]`:二维字符数组,表示网格地图。其中 `#` 表示障碍...

    经典hash源码

    5. 设计算法:如Dijkstra算法、A*搜索算法中的优先队列等。 总结,哈希技术在IT领域有着广泛的应用,理解其基本原理和经典源码实现对于提升编程能力至关重要。通过对哈希函数的选择和优化,我们可以创建更高效、更...

    数据结构(C语言版)\Java数据结构和算

    9.1 单端优先队列和双端优先队列 9.2 左倾树 9.3 二项式堆 9.4 Fibonacci堆 9.5 配偶堆 9.6 对称最小-最大堆 9.7 区间堆 9.8 参考文献和选读材料 第10章 高效二叉查找树 10.1 最优二叉查找树 10.2 AVL树 ...

    数据结顾 模拟超市顾客流

    3. **优先队列**:如果考虑优先级服务,例如VIP顾客享受快速通道,那么我们可以使用优先队列。优先队列允许根据优先级决定哪个元素最先被处理。在Python中,`heapq`库可以用来实现优先队列。 4. **链表**:链表数据...

    堆优化的djkstra算法

    3. **更新优先队列**:当更新某个顶点的距离时,同时调整优先队列,确保下次取出的是具有最小距离的顶点。 #### 三、代码分析 ##### 3.1 数据结构定义 ```cpp struct node { node(int vv = 0, int dd = 0) : vexn...

    数据结构(字符串匹配,hash,二叉树)训练

    堆常用于优先队列和高效的排序算法,如堆排序。实验要求实现基本的堆操作,如插入、删除、查找最大/最小元素,并添加一个新操作`lessthan(int key)`,返回所有小于或等于给定关键字`key`的元素。这需要维护堆的结构...

    20151910042-刘鹏-DSA思考题-10 - Graph Traversal and Hash Table1

    - 优先队列的基本操作包括插入元素、删除最小元素(最大元素)和检查最小元素。 9. **哈希码构造方法**: - 可以使用数字运算、字符串拼接、异或操作等构建哈希函数,确保输入的微小变化会导致哈希码的大范围变化...

    Hash表算法

    ### Hash表算法详解 #### 一、Top K算法详解 **问题描述:** 在搜索引擎的日志文件中,记录了用户每次检索使用的所有检索串。...此外,对于找出Top K的问题,优先队列/堆方法也是一个高效且实用的方案。

    数据结构(严慰民)配套纯C代码

    3. **树形结构**:包括二叉树、平衡树(如AVL树和红黑树)、堆(如优先队列)。二叉树是最简单的一种,每个节点最多有两个子节点。平衡树通过保持树的高度平衡来确保查找效率。堆是一种特殊的树形结构,满足堆性质,...

    数据结构与算法分析-java

    第6章“优先队列(堆)”,讨论了优先队列这种支持对元素进行排序的数据结构。优先队列通常与堆这种数据结构一起讨论,因为堆是实现优先队列的常用方法之一。 第7章是“排序”。排序是数据处理中的一项基本操作,本...

    24数据结构课件.zip

    堆(Heap)是一种特殊的树形数据结构,满足最大堆或最小堆性质,常用于优先队列的实现。 另外,字符串作为一种特殊的数据结构,其操作包括匹配、搜索、替换等,在文本处理和自然语言处理中扮演着重要角色。而散列表...

    数据结构与算法分析C++描述

    6. 优先队列(Priority Queue):优先队列是一种数据结构,可以快速访问具有最高优先级的元素。堆通常是实现优先队列的首选数据结构。 算法部分,教材将涉及以下高级主题: 1. 排序算法(Sorting Algorithms):...

    计算机专业英语 chapter PPT学习教案.pptx

    优先队列(Priority Queue)是一种特殊的队列,其中元素按照优先级排序,高优先级元素会优先处理。复用性(Reusability)强调代码或数据结构能够在多个场合重复使用,以提高软件开发的效率和质量。 总的来说,...

    hash_game

    堆常用于优先队列的实现,比如在游戏中的任务优先级排序、事件调度等。 3. **JavaScript(JS)**:JavaScript是一种广泛使用的客户端脚本语言,主要用于网页和网络应用开发。在这个项目中,JavaScript可能用于处理...

    c版数据结构

    5. **特殊数据结构**:包括散列表(Hash表)、堆栈、队列、队列、优先队列、字典树(Trie树)等,它们在解决特定问题时有着高效的表现,如哈希表的快速查找、字典树的字符串查找等。 通过《C版数据结构》的学习和...

    sunview.rar_lines

    3. 使用哈希表或优先队列来存储和更新行计数。 4. 提供API,如`addLine()`,`updateLineCount()`,`getMostFrequentLines()`等,便于其他部分的代码与数据结构交互。 5. 在`tcov.c`中实现这些函数,并可能在`sunview...

    严蔚敏数据结构源代码

    7. **CHAP12**:可能是高级数据结构,如堆、优先队列和B树等,这些在数据库和操作系统中广泛应用。 8. **CHAP02**:可能介绍基本数据结构,如数组、字符串和结构体,它们是构建复杂数据结构的基础。 9. **CHAP07**...

    数据结构各种习题 很好很强大

    堆是一种特殊的树形数据结构,满足最大堆或最小堆的性质,常用于实现优先队列。在da09.htm或da10.htm中可能会有建立堆、调整堆、堆排序等相关习题。 通过对这些习题的练习,你可以巩固对数据结构的理解,提升算法...

    SHW2树应用类讨论题1

    讨论中提到的最优方法结合了散列、映射(Map)和优先队列(Priority Queue)。首先,利用散列函数将短信映射到哈希表中,然后使用链表处理哈希冲突。在哈希表中,通过映射(Map)记录短信出现的频率。最后,用优先...

Global site tag (gtag.js) - Google Analytics