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

  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. 常用的Linux终端

    常用的Linux终端 gnome-terminal (Gnome标配) xfce4-terminal (XFCE4标配) lxterminal (LXDE标配) konsole (KDE标配) 前面3 ...

  2. Ajax省市联动

    以JQuery为JS,写的Ajax省市联动. 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  3. 如何构建你自己的Java库【翻译】

    原文http://www.programcreek.com/2011/07/build-a-java-library-for-yourself/ 原文和翻译都只是参考,如有不对,欢迎指正. 代码复用是 ...

  4. 【转载】git/github初级运用自如

    之前了解过github,并在上面看了一些项目的源代码,于是自己也在github上创建了账户,希望以后有机会也把自己的项目托管在上面去.但是前提你要先了解git/github,下面的内容是从我的好基友虫 ...

  5. Mysql:常用代码

    C/S: Client Server B/S: Brower Server Php主要实现B/S .net IIS Jave TomCat LAMP:L Mysql:常用代码 Create table ...

  6. 24个有用的PHP类库分享

    目前,PHP是用于Web开发的最流行的脚本语言.你可以在互联网上随手找到关于PHP大量资料,包括文档.教程.工具等等.PHP不仅是一种功能丰富的语言,它还能帮助开发人员轻松地创建更好的网络环境.为了进 ...

  7. (二)CSS基础语法

    CSS语法规则由两个主要的部分构成:选择器,以及一条或者多条声明. 下面的示意图为您展示了CSS语法结构: 例如: h1{color:red;font-size:14px;} 值得不同写法和单位 其中 ...

  8. Java面向对象详解

    Java面向对象详解 前言:接触项目开发也有很长一段时间了,最近开始萌发出想回过头来写写以前学 过的基础知识的想法.一是原来刚开始学习接触编程,一个人跌跌撞撞摸索着往前走,初学的时候很多东西理解的也懵 ...

  9. Android studio中Rendering Problems不能可视化操作的解决办法

    出现:Rendering Problems the following classes could not be found:android.support.v7.internal.widget.Ac ...

  10. UVa 120 Stacks of Flapjacks【构造法】

    题意:给出n张煎饼,从上到下输入,每张煎饼上面都有一个数字,厨师每次可以选择第k张煎饼,进行翻转操作,设计一种方法使得所有煎饼按照从小到大排序(最上面的煎饼最小) 首先是这个翻转的操作,如下图 如图所 ...