数据结构笔记
这里是我数据结构的学习笔记
前言
学习中,持续更新中
一、树
1.二叉树
1.完全二叉树
完全二叉树性质:
n表示完全 二叉树的节点数;
n
0
n_0
n0 表示叶子结点;
n
1
n_1
n1 表示只有1个子节点的节点数;
n
2
n_2
n2 表示有2个子节点的节点数。
二叉树的性质
n
=
n
0
+
n
1
+
n
2
n=n_0+n_1+n_2
n=n0+n1+n2 和
n
0
=
n
2
+
1
n_0=n_2+1
n0=n2+1
堆排序:
判断是否为堆排序(大根堆,就是所有子节点都比父节点大,或小根堆),要根据堆排序的两点性质来判断,分别是:
(1)
k
i
≤
k
2
i
k_i≤k_{2i}
ki≤k2i且
k
i
≤
k
2
i
+
1
k_i≤k_{2i+1}
ki≤k2i+1 或(2)
k
i
≥
k
2
i
k_i≥k_{2i}
ki≥k2i且
k
i
≥
k
2
i
+
1
(
1
≤
i
≤
n
)
k
i
k_i≥k_{2i+1}(1≤i≤ n) ki
ki≥k2i+1(1≤i≤n)ki相当于二叉树的非叶结点,
K
2
i
K_{2i}
K2i则是左孩子,
k
2
i
+
1
k_{2i+1}
k2i+1是右孩子.
哈夫曼树
哈夫曼树中,结点的度可能为0,2。为什么呢?因为他的构造规则:
假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:
(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);
(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;
(3)从森林中删除选取的两棵树,并将新树加入森林;
(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。
哈夫曼树也可以是多叉的,核心思想就是每次找出最权值最小的k个根节点。
二、
1.引入库
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
总结
这里对文章进行总结: