• 数据结构 —— 递归和树


    概况:

    递归和分治

    • 递归中用到了分治法。
    • 分治法的思想简单概括就是“分而治之”。
    • 递归实际使用“栈”来实现的。
    • 递归包括递归方程、临界条件:

    • EX:实现随机斐波那契数列?汉诺塔?八皇后-->N皇后?
    • 时间复杂度:递归时间复杂度是很大的。

           So可以用记忆递归法:牺牲空间,换取时间。(办法:放到数组里,数组空间浪费大,但读取快)

         Ex:HDU 2041 超级楼梯、HDU 2044  一只小蜜蜂...

    • 综上,做递归的题,要先分析,再总结出递归方程。

        Ex:HDU 2050 折线分割平面 (标准递归题)

    • 二分搜索(大整数的乘法、矩阵乘法(棋盘覆盖))
    • 合并排序
    • 快速排序

    • 树的分支最多有2个。又叫孩子数。结点的左孩子,右孩子。
    • 度是孩子个数。
    • 叶子结点:度为0
    • 基本概念:
      树:树要么为空,要么由根结点和n(n>=0)棵子树组成
      森林:由m(m>=0)棵树组成
      结点的度:结点拥有的子树数
      树的度:树内各结点度的最大值
      叶子:度为零的结点,也称终端结点。
      结点的层次:从根开始为第1层,根的孩子为第2层,依此类推。
      树的深度:树内结点的最大层次
      有序树和无序树:如果将树中结点各子树看成是从左到右有次序的,称之有序,否则无序。
     
    • 树的遍历:
    • Huffman树:
      一个无序数列,取这个数列中最小的两个数相加,和替代原来数组中原来这两个数,并作为二叉树中一个结点以及结点的两个孩子,不断重复这个过程,直到最后  构成一棵唯一的二叉树。
      Ex:HDU 1710、HDU 1053
     
    • 并查集:
      由“并”和“查”组成。
    • find();  //查。查找某个元素的根(root)元素是谁,返回根元素的值。
    • merge();    //并。如果查(find)出的根(root)元素相同,说明有联系,将有联系的元素并到一个集合中。
      Ex:HDU 1232  //这道题就是求最后有几个集合,只要求出来了,就做出来了。
     

     

    Freecode : www.cnblogs.com/yym2013

  • 相关阅读:
    C++的常量折叠(一)
    如何写面向互联网公司的求职简历
    所有的程序员都是自学成才
    [一个经典的多线程同步问题]解决方案一:关键段CS
    [一个经典的多线程同步问题]问题引入
    多线程笔记--原子操作Interlocked系列函数
    【分治法】归并分类
    内存字节对齐一网打尽,再也不纠结
    在C语言中基本数据类型所占的字节数
    多线程笔记--先了解工具
  • 原文地址:https://www.cnblogs.com/yym2013/p/3246586.html
Copyright © 2020-2023  润新知