二分搜索 树结构 python描述

二分搜索 树结构 python描述搜索是在一个项目集合中找到一个特定项目的算法过程. 搜索通常的答案是真的或假的, 因为该项目是否存在. 搜索的几种常见方法: 顺序查找. 二分法查找, 二叉树查找, 哈希查找.二分法查找二分查找又称折半查找, 有点事比较次数少, 查找速度快, 平均性能好; 其缺点是要求待查表为有序表, 且插入删除困难. 因此, 二分查找法适用于不经常变动而查找频繁的有序列...
摘要由CSDN通过智能技术生成

二分搜索 树结构 python描述

搜索是在一个项目集合中找到一个特定项目的算法过程. 搜索通常的答案是真的或假的, 因为该项目是否存在. 搜索的几种常见方法: 顺序查找. 二分法查找, 二叉树查找, 哈希查找.

二分法查找

二分查找又称折半查找, 有点事比较次数少, 查找速度快, 平均性能好; 其缺点是要求待查表为有序表, 且插入删除困难. 因此, 二分查找法适用于不经常变动而查找频繁的有序列表.

二分法查找步骤

⾸先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字⽐较,如果两者相等,则查找成功;否则利⽤中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进⼀步查找前一子表,否则进⼀步查找后一子表。重复以上过程,直到找到满⾜条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

1554560329989

代码实现

非递归实现
# –*– coding: utf-8 –*–
# @Time      : 2019/4/6 22:21
# @Author    : Damon_duanlei
# @FileName  : binary_search.py
# @BlogsAddr : https://blog.csdn.net/Damon_duanlei


def binary_search(find_list, search_info):
    """
    二分法非递归实现
    :param find_list: 查询列表
    :param search_info: 查找元素
    :return: Ture  or False
    """
    low = 0
    high = len(find_list) - 1
    while low <= high:
        mid = (low + high) // 2
        if search_info == find_list[mid]:
            return mid
        if search_info > find_list[mid]:
            low = mid + 1
        else:
            high = mid - 1
    return None

递归实现
# –*– coding: utf-8 –*–
# @Time      : 2019/4/6 22:21
# @Author    : Damon_duanlei
# @FileName  : binary_search.py
# @BlogsAddr : https://blog.csdn.net/Damon_duanlei


def binary_search2(find_list, search_info):
    """
    二分法递归实现
    :param find_list: 查询列表
    :param search_info: 查找元素
    :return: Ture  or False
    """
    n = len(find_list) // 2
    if find_list[n] == search_info:
        return True
    elif search_info > find_list[n]:
        return binary_search2(find_list[n:], search_info)
    else:
        return binary_search2(find_list[:n], search_info)

注意:经过一定次数的测试, 非递归方式的二分法查找效率明显高于递归方式的二分法查找.

树与树算法

树的概念

树 (英语 tree ) 是一种抽象数据类型 (ADT) 或是视作这种抽象数据类型的数据结构, 用来模拟就有树状结构性质的数据集合. 它是由 n (n >= 1) 个有限节点组成一个具有层次关系的集合. 把它叫做 “树” 是因为他看起来像一颗倒挂的树, 也就是说它是根朝上, 叶朝下的. 它具有以下的特点:

  • 每个节点有零个或多个子节点;
  • 没有父节点的节点称为根节点;
  • 每一个非跟节点有且只有一个父节点;
  • 除了根节点外, 每个子节点可以分为多个不想交的子树;

树的术语

  • 节点的度: 一个节点含有的子树的个数称为该节点的度;
  • 树的度: 一棵树中, 最大的节点的度称为树的度;
  • 叶节点或终端节点: 度为零的节点;
  • 父亲节点或父节点: 若一个节点含有子节点, 则这个节点成为其子节点的父节点;
  • 孩子节点或子节点: 一个节点含有的子树的跟节点称该节点的子节点;
  • 兄弟节点: 具有相同父节点的节点互称为兄弟节点;
  • 节点的层次: 从根开始定义起, 根为第一层,根的子节点为第二次, 以此类推;
  • 树的高度或深度: 树中节点的最大层次;
  • 堂兄弟节点: 父节点在同一层的节点互为堂兄弟;
  • 节点的祖先: 从根到该节点所经分支上的所有节点;
  • 子孙: 以某节点为根的子树中任一节点都称为该节点的子孙
  • 森林: 由 m (m &
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值