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

  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. spring 定时任务的 执行时间设置规则(转)

     spring 定时任务的 执行时间设置规则 单纯针对时间的设置规则org.springframework.scheduling.quartz.CronTriggerBean允许你更精确地控制任务的运 ...

  2. 【最新】最流行的java后台框架 springmvc mybaits 集代码生成器 SSM SSH

        获取[下载地址]   QQ: 313596790   [免费支持更新] A 代码生成器(开发利器);全部是源码     增删改查的处理类,service层,mybatis的xml,SQL( m ...

  3. Buffer数据结构和new IO的Memory-mapped files

    一.Buffer类 java.nio.Buffer这个类是用来干什么的?有怎样的结构? "Core Java"中是这样定义的“A buffer is array of values ...

  4. 高性能Web框架Zend Framework

    Zend Framework (ZF)是用 PHP 5.3及更高版本来开发 Web 程序和服务的开源框架.ZF用100% 面向对象编码实现. ZF的组件结构独一无二,每个组件几乎不依靠其他组件.这样的 ...

  5. AsciiDoc Markup Syntax Summary

    AsciiDoc Markup Syntax Summary ============================== A summary of the most commonly used ma ...

  6. ios开发之 MPMoviePlayerController 视频播放器

    MPMoviePlayerController 与AVAudioPlayer有点类似,前者播放视频,后者播放音频,不过也有很大不同,MPMoviePlayerController 可以直接通过远程UR ...

  7. getpeername

    定义: int getpeername(int s, struct sockaddr *name, socklen_t *namelen); 描述: 获取socket的对方地址   得到对方的地址 s ...

  8. 内核MKDEV(MAJOR, MINOR)宏

    版本:linux-2.6.24.4宏:    MKDEV(MAJOR, MINOR);  说明: 获取设备在设备表中的位置.        MAJOR   主设备号        MINOR   次设 ...

  9. Hibernate的一个注释 @Transient

    @Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性. 如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basi ...

  10. Toad创建DBLINKsop

    Toad创建DBLINKsop 1.创建服务: 点击“测试”,出现如下测试窗口后点击更改登录,用户名和密码数据目标主机用户名.密码; 出现如下窗口后,点击“关闭”,然后点击“完成”即可; 2.创建db ...