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

  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. csh与bash比较

    csh与bash比较:一.csh的while循环控制结构及if then:#!/bin/csh -fwhile ($#argv >= 1)  if ("$1" == &quo ...

  2. Android View 绘制过程

    Android的View绘制是从根节点(Activity是DecorView)开始,他是一个自上而下的过程.View的绘制经历三个过程:Measure.Layout.Draw.基本流程如下图: per ...

  3. 真心崩溃了,oracle安装完成后居然没有tnsnames.ora和listener.ora文件

    problem: oracle  11  r2  64位安装完成后NETWORK/ADMIN目录下居然没有tnsnames.ora和listener.ora文件 solution: 问题是之前安装了另 ...

  4. 一位ACM过来人的心得(转)

    励志下! 刻苦的训练我打算最后稍微提一下.主要说后者:什么是有效地训练? 我想说下我的理解.很多ACMer入门的时候,都被告知:要多做题,做个500多道就变牛了.其实,这既不是充分条件.也不会是必要条 ...

  5. linux 定时任务调度Cron的用法详解

    在linux中,推荐使用crontab -e命令添加自定义的任务,退出后重启crond进程. 重新启动cron服务或重新加载cron配置,命令: 复制代码代码示例: /etc/rc.d/init.d/ ...

  6. Android 使用库项目时的一个特殊tip

    前提: 项目A作为库项目被项目B引用,但是项目A中有自定义的控件和自定义的属性,当在项目B中使用自定义的属性时,编译时就会直接报错:No resource identifier found for a ...

  7. eclipse设置自定义快捷键

    eclipse有很多强大且人性化的功能,而各项功能有时又隐藏得比较深(需要点击数次菜单才能找到),而系统提供的快捷键有时比较难记住甚至根本没有提供快捷键时,就需要自己手动设置快捷键了.设置方法有两种, ...

  8. 认识solr结构,了解核心的文件目录

    下载solr并解压后,发现solr的目录里有很多的东西,此时我们可能会感到很恐慌,不知如何下手,下面让我带你认识它. 1.解压后的solr目录结构如下: 虽然里面有很多的文件,但是我们需要的其实就两个 ...

  9. android学习—— context 和 getApplicationContext()

    一直看到好多应用里面,随手使用getApplicationContext(),不想说也不乐意说,今天转载一篇文章区分两者的区别: 在android中常常会遇到与context有关的内容 浅论一下con ...

  10. MYSQL内存

    全局内存(BASE MEMORY) 线程内存(MEMORY PER CONNECTION) max_conecctions:整个 MySQL 允许的最大连接数; max_user_connection ...