今天主要复习下数据结构的东西 

  1. 自平衡二叉查找树

    1. AVL树(高平衡树)(wiki)
      1. 特性:任何节点的两个子树的高度最大差别为一
      2. 时间复杂度:查找、插入和删除在平均和最坏情况下都是O(log n)
    2. 红黑树(对称二叉B树)(wiki)
      1. 特性:
        1. 节点是红色或黑色
        2. 根是黑色
        3. 所有叶子都是黑色(叶子是NIL节点)
        4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
        5. 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。
      2. 优势:
        1. 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长,在高度上的理论上限允许红黑树在最坏情况下都是高效的
        2. 统计性能好
      3. 用途:用来构造关联数组(Map)和集合(Set)
  2. B树

    1. B-树 (百度百科)
      1. 特性:关键字分布在整颗树中,查找成功立即结束(区别于B+树)
      2. 性能:搜索效率等价于二分查找
      3. 用途:常用于文件引索系统
    2. B+树
      1. 特性:每个关键字不保存数据,只用来索引,所有数据都保存在叶子节点,查找成功也要跳到叶子节点才结束(区别于B-树)
      2. 用途:通常用于数据库和操作系统的文件系统中
    3. B*树
      1. B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针;B树定义了非叶子结点关键字个数至少为(2/3)M,即块的最低使用率为2/3(代替B+树的1/2);
  3. 键树

    1. 键树(数字查找树)
      1. 每条通往叶子节点的路径都是一个关键字符串
    2. trie树(字典树)
      1. 典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计
      2. 优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希表高

排序(java实现)

参见我的另一篇博客:some-sort-algorithms
这里用java再实现一遍,代码比较多,放到另一篇博客去了:some-sort-algorithms-java

查找

  1. 二分查找
    package vell.bibi.algorithms.search;
    
    public class BinarySearch {
        
        // 非递归实现
        public static int search(int[] a, int key){
            int low=0, high=a.length-1, mid = 0;
            while(high>=low){
                mid = (high + low) / 2;
                if(key == a[mid]) return mid;
                else if(key > a[mid]) low = mid + 1;
                else high = mid - 1;
            }
            return -1;
        }
        
        // 递归实现
        public static int search(int[] a, int low, int high, int key){
            if(high < low) return -1;
            int mid = (low + high) / 2;
            if(key == a[mid]) return mid;
            else if(key > a[mid]) return search(a, mid+1, high, key);
            else return search(a, low, mid-1, key);
        }
        
        public static void main(String[] args) {
            int[] a = {2,3,4,5,6,7,8,9,10,11};
            System.out.println(search(a, 5));
            System.out.println(search(a, 0, a.length-1, 5));
        }
    }

java 复习003的更多相关文章

  1. java 复习003 之排序篇

    由java 复习003跳转过来的C语言实现版见some-sort-algorithms 快速排序(不稳定 O(n log n)) package vell.bibi.sort_algorithms; ...

  2. java 复习001

    java 复习001 比较随意的记录下我的java复习笔记 ArrayList 内存扩展方法 分配一片更大的内存空间,复制原有的数据到新的内存中,让引用指向新的内存地址 ArrayList在内存不够时 ...

  3. java复习(1)---java与C++区别

    [系列说明]java复习系列适宜有过java学习或C++基础或了解java初步知识的人阅读,目的是为了帮助学习过java但是好久没用已经遗忘了的童鞋快速捡起来.或者教给想快速学习java的童鞋如何应用 ...

  4. Java复习11. 单例编程

    Java复习11. 单例编程 1.最简单的写法,那个方式是线程不安全的 public class Singleton {     private static Singleton instance; ...

  5. Java复习9网路编程

    Java 复习9网路编程 20131008 前言: Java语言在网络通信上面的开发要远远领先于其他编程语言,这是Java开发中最重要的应用,可以基于协议的编程,如Socket,URLConnecti ...

  6. Java复习8.多线程

    Java复习8 多线程知识 20131007 前言: 在Java中本身就是支持多线程程序的,而不是像C++那样,对于多线程的程序,需要调用操作系统的API 接口去实现多线程的程序,而Java是支持多线 ...

  7. Java复习10.Servlet编程

    Java复习10. Servlet编程知识 20131008 前言: 之前在大三下的时候,学习了一个月的JSP和Servlet知识,但是没有什么项目经验,把JSP Web开发学习实录看了前面几张,后面 ...

  8. Java复习6异常处理

    Java复习6.异常处理 20131005 前言: Java中的异常处理机制是非常强大的,相比C++ 来说,更加系统.但是我们开发人员没有很好的使用这一点.一些小的程序是没有什么问题的,但是对于大型项 ...

  9. Java复习4.数组初始化.

    Java复习4.Java中的数组声明方式  20131004 1.数组声明和初始化, 数组元素和变量一样,可以在定义的时候i进行初始化.数组元素的初始化工作实在编译阶段完成的,可以减少运行时间. 在初 ...

随机推荐

  1. C#四种文件流的区别(转)

    1.FileStream类的读写操作 FileStream类可以对任意类型的文件进行读取操作,而且我们也可以按照需要指定每一次读取字节长度,以此减少内存的消耗,提高读取效率. 代码实例: //创建文件 ...

  2. *windows下安装以及配置nginx

    1.从nginx官网下载相应的安装包. http://nginx.org/

  3. shell编程基础(4)case 与 function

    case case语句不用多说和c++里一样,用作选择,但是linux的case语句在语法上和c++还是有些不同的. ###########This is program test the Case# ...

  4. Tomcat的SessionID引起的Session Fixation和Session Hijacking问题

    上一篇说到<Spring MVC防御CSRF.XSS和SQL注入攻击>,今天说说SessionID带来的漏洞攻击问题.首先,什么是Session Fixation攻击和Session Hi ...

  5. apache&nginx资料汇总

    http://liudaoru.iteye.com/blog/336338 aquid:http://os.51cto.com/art/201009/225813.htm 数据库各种讲座:http:/ ...

  6. Python中模拟enum枚举类型的5种方法分享

    这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下   以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...

  7. 關於NPOI的一點補充和示例

    最近看到很多人分享NPOI的用法. 但是很多都不是完整示例或者並沒有實戰效果. 剛好最近有個VB.NET的項目有升級原有的oledb select sheet$的做法. 很明顯,NPOI有更好的穩定性 ...

  8. bzoj3261: 最大异或和

    可持久化trie.又是%%%Xs酱... #include<cstdio> #include<cstring> #include<iostream> #includ ...

  9. 移动APP服务端API设计应该考虑到的问题

    2014年,移动APP的热度丝毫没有减退,并没有像桌面软件被WEB网站那样所取代, 不但如此,越来越多的传统应用.网站也都开始制作自己的移动APP,也就是我们常说的IOS客户端.android客户端. ...

  10. Java Web编程的主要组件技术——JSP

    参考书籍:<J2EE开源编程精要15讲> JSP(Java Server Page)页面由HTML代码和嵌入其中的Java代码组成. 简单的JSP页面如: <html> < ...