zoukankan      html  css  js  c++  java
  • 树的预备知识,基本术语,顺序查找(哨兵)和二分查找


    客观世界中许多食物存在层次关系:人类社会家谱、社会组织结构、文件路径
    分层次组织在管理上具有更高的效率
    查找:静态查找:集合中的记录是固定不变的
    哨兵,第一个字符放长度,在第零号位置存放我们要查找的字符,从后往前查找
    动态查找:集合中的记录是动态变化的
    静态查找
    方法一:顺序查找:(哨兵)

    1 typedef struct LNode *List;
    2 strut LNode {
    3 ElementType Element[MAXSIZE];
    4 int length;
    5 };
    1 //查找的函数实现
    2 int SequentialSearch(List Tb1, ElementType K)
    3 {//在Element[1]~Element[n]中查找关键字为K的数据元素
    4 int i;
    5 Tb1->Element[0] = K; /*建立哨兵**/
    6 for(i= Tb1->length; Tb1->Element[i] != K; i--);
    7 return i;    //查找成功返回所在单元下标;不成功返回0
    8 }

    方法二、二分查找(Binary Search)
    假设n个数据元素的关键字满足有序且是连续存放(在数组中),那么可以进行二分查找
    在链表中则不能二分查找,无序也不能二分查找
    left mid right
    当right > left 时,查找失败
    二分查找判定树:判定树上每个结点需要的查找次数刚好为该结点所在的层数
    查找成功时不会超过判定树的深度
    n个结点的判定树的深度为[log2n]+1

    数的定义: n(n>=0)个结点构成的有限集合
    n = 0 时为空树
    根r(root)
    字树:字树之间是不想交的,
    除根节点外,每个结点有且仅有一个父节点
    一棵N个结点的数有N-1条边
    数是保证结点连通的边最少的一种连接方式


    树的一些基本概念:
    结点的度:(degree)结点的字树个数
    树的度:
    叶节点 (Leaf ):度为0的结点,没有字树的结点
    父结点:(parent)有字树的结点是其字树的根节点的父节点
    子节点:(child):
    兄弟结点( (Sibling ):具有同一父节点的各结点彼此是兄弟结点
    路径和路径长度:从结点n 1 到 到n k 的 路径 为一个结点序列n 1 , n 2 ,… , n k , n i 是 是 n i+1 的父结
    点。路径上边的条数就是路径长度

    祖先结点(Ancestor) :沿树根到某一节点路径上的所有结点都是这个结点的祖先结点
    子孙结点(Descendant) :某一节点的子树中所有结点是这个结点的子孙
    结点的层次 (Level ):规定根结点在1层,其他任意结点的层数是其父节点的层数加一
    树的深度( (Depth):树中所有结点中的最大层次是这棵树的深度
    任意结点的深度:从根结点到该结点的唯一路径的长度(所以根节点的深度为0)
    结点的高:从该结点到一片树叶的最长路径的长(所以树叶的高为0)
    后裔:
    真后裔:
    ASL = (4*4 + 4*3 + 2*2 +1) = 3 //平均成功查找次数

    二分查找代码:

     1 int BinarySearch(StaTalbe *Tbl, ElementType K)
     2 {//在表TB了中查找关键字为K的数据元素
     3 int left, right, mid, NotFound = -1;
     4 left = 1;    //初始左边界
     5 right = Tbl->length;    //初始右边界
     6 while(left <= right)
     7 {
     8 mid = (left + right) / 2;    //计算中间元素坐标
     9 if(K < Tbl->element[mid]) right = mid - 1;    //调整有边界
    10 else if(K > Tbl->element[mid] left = mid +1;    //调整做边界
    11 else    return mid;    //查找成功,返回数据元素的下标
    12 }
    13 return NotFound;    //查找不成功,返回-1;
    14 }

    数的定义: n(n>=0)个结点构成的有限集合
    n = 0 时为空树
    根r(root)
    字树:字树之间是不想交的,
    除根节点外,每个结点有且仅有一个父节点
    一棵N个结点的数有N-1条边
    数是保证结点连通的边最少的一种连接方式


    树的一些基本概念:
    结点的度:(degree)结点的字树个数
    树的度:
    叶节点 (Leaf ):度为0的结点,没有字树的结点
    父结点:(parent)有字树的结点是其字树的根节点的父节点
    子节点:(child):
    兄弟结点( (Sibling ):具有同一父节点的各结点彼此是兄弟结点
    路径和路径长度:从结点n 1 到 到n k 的 路径 为一个结点序列n 1 , n 2 ,… , n k , n i 是 是 n i+1 的父结点。路径上边的条数就是路径长度

    祖先结点(Ancestor) :沿树根到某一节点路径上的所有结点都是这个结点的祖先结点

    子孙结点(Descendant) :某一节点的子树中所有结点是这个结点的子孙
    结点的层次 (Level ):规定根结点在1层,其他任意结点的层数是其父节点的层数加一
    树的深度( (Depth):树中所有结点中的最大层次是这棵树的深度
    任意结点的深度:从根结点到该结点的唯一路径的长度(所以根节点的深度为0)
    结点的高:从该结点到一片树叶的最长路径的长(所以树叶的高为0)
    后裔:
    真后裔:

  • 相关阅读:
    论企业家的修养七“善”(转)
    2009中国企业家新春联谊会
    独步红尘
    诗人的悲哀
    我们恋爱吧
    为妈妈祈福
    向总统学习形像包装!【强烈推荐】
    为了你,我开始学着写诗
    亲爱的,我们去私奔吧
    要做最好的自己:“优化”大脑的22条有效方法
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/9504736.html
Copyright © 2011-2022 走看看