
DS-知识点杂记
随手记
逻各斯码
专注于各种技术(前后端、算法、AI等)的全链路能力养成,以及企业级解决方案。
专注于用「逻辑拆解本质、辩证审视关联、闭环沉淀经验」的思路高效啃透任何知识——学习的核心不是堆砌信息,而是建立可复用的思维框架。
推荐瑞·达利欧《原则》:很多事物都是同一本质的不同表现形式,正确识别本质后,用记录的比较完善的方法快速解决。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
二进制/八进制转换器
题目要求 编写一段程序,要求从终端输入一串0/1表示的二进制数,输出它的八进制表达形式。 题目分析 进行数制转换这类运算最简单的方法就是使用栈的数据结构。 (1)在输入二进制数时,将每次输入的0/1压入栈A中保存。 (2)转换时,要将二进制的每三位转换成八进制的一位,先得到的是八进制的低位数,因此可以将八进制数保存到一个新的栈B中,知道将栈A中的元素取完为止。 (3)最后将栈B 中的八进原创 2018-01-02 20:19:00 · 1352 阅读 · 0 评论 -
回溯法(四皇后)
回溯法的基本思想四皇后问题的回溯法回溯法的基本思想:1.在包含问题的所有解的解空间树中(解空间:不是所有正解的集合的意思,包含完成一件事的正确部分的意思),按照深度优先搜索的策略,从根结点出发深度探索解空间树。 2.当探索到某一结点时,要判断该结点是否包含问题的解 (a)若包含,就从出发继续探索下去 (b)若该结点不包含问题的解那就说明以该结点为根结点的子原创 2018-01-04 11:19:19 · 5289 阅读 · 0 评论 -
Hash查找(基于数组)
基于数组的hash查找基于数组的hash查找#include<stdio.h>#define DataType int#define N 30typedef struct HashNode { DataType data; //存储值 int isNull; //标志该位置是否已被填充 }HashTable;HashTable hashTable原创 2018-01-17 09:10:42 · 546 阅读 · 0 评论 -
希尔排序
希尔排序的基本思想如何选取间隔数gap值希尔排序:又称”缩小增量排序“(Diminishing Increment Sort),是希尔对插入排序的一种改进 希尔排序的基本思想:(1)设定一个元素间隔增量gap,将参加排序的序列按这个间隔数gap从第一个元素开始依次分成若干个子序列。在子序列中可采用其他排序方法。从而得到一个新序列。 (2)然后缩小增量gap,原创 2017-12-26 18:59:44 · 479 阅读 · 0 评论 -
B树、B-树、B+树、B*树
B树B-树B-树的特性B树B的特性B树B 树的分裂B 树的分裂B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如:B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中; 否则,如果查询关键字比结点关原创 2018-01-16 19:33:26 · 164 阅读 · 0 评论 -
哈希表(散列表)概述
常用方法直接寻址法数字分析法平方取中法折叠法1移位叠加2间界叠加随机数法除留余数法处理冲突开放寻址法再散列法链地址法拉链法建立一个公共溢出区查找性能影响产生冲突多少的三个因素著名的hash算法Hash算法应用若关键字为k,则其值存放在f(k)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数,按这个思想建立的表为散列表。 对不同的关键字可原创 2018-01-16 14:33:17 · 685 阅读 · 0 评论 -
查找的平均长度
平均查找长度查找成功查找不成功各查找的平均长度平均查找长度查找成功为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值称为查找算法在查找成功时的平均查找长度 例: 对于含有n个数据元素的查找表,查找成功的平均查找长度为:ASL=∑PiCi (i=1,2,3,…,n),可以简单以数学上的期望来这么理解。其中:Pi 为查找表中第i个数据元素的概率,Ci为找到第i个数据元素时已经比原创 2018-01-16 08:41:16 · 1029 阅读 · 0 评论 -
各排序算法的性能(复杂度)
1.时间复杂度时间复杂度可以认为是对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。(1) 常见的时间复杂度有: 常数阶O(1),对数阶O(log2_2n),线性阶O(n), 线性对数阶O(nlog2_2n),平方阶O(n2n^2)(2)时间复杂度O(1): 算法中语句执行次数为一个常数,则时间复杂度为O(1),2、空间复杂度空间复杂度是指算法在计算机内执行原创 2018-01-15 23:45:43 · 295 阅读 · 0 评论 -
动态模拟创建二叉树
题目要求 编写一个c程序,要求在c程序图形界面下动态模拟显示二叉树的先序创建过程。题目分析 为了动态地显示二叉树的先序创建过程,首先要在内存中生成一棵真正的二叉树,然后对二叉树进行先序遍历,每遍历到一个结点就将该结点的内容输出到界面上,打印出一个结点的图案。在遍历二叉树的过程中,要根据二叉树的结点所在该二叉树中的位置的不同,设置图形界面中对应结点的图案的位置。另外,还有结点之间的线。 程序如下:原创 2018-01-05 16:25:09 · 2657 阅读 · 0 评论 -
判断完全二叉树
完全二叉树满二叉树判断完全二叉树的充分必要条件完全二叉树深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中的编号为1~n的结点相对应,则这个二叉树为完全二叉树.满二叉树深度为k 且有2^k-1个结点的二叉树. 结点的编号约定为:从根结点起从上至下,自左向右地顺序编号.判断完全二叉树的充分必要条件(1)如果一棵完原创 2018-01-03 17:52:51 · 376 阅读 · 0 评论 -
冒泡排序
冒泡排序的基本思想冒泡算法与对其的改进冒泡排序是较常用的排序方法。是一类具有”交换“性质的排序方法。冒泡排序的基本思想:(以按从小到大排序为例) (1)将序列中的第1个元素与第2个元素进行比较,若前者大于后者,交换,否则,不交换。 (2)再将第2个元素与第3个元素比较,若前者大于后者,则交换,否则,不交换。 (3)以此类推,直到第n-1个元素与第n个元素进行比较为止。 以上过程为第1趟冒泡原创 2017-12-26 21:18:01 · 253 阅读 · 0 评论 -
选择排序
选择排序的基本思想选择排序的基本思想:(已从小到大为例) 第i趟排序从序列的后n-i+1(i=1,2,…,n-1)个元素中选择一个最小的元素与该n-i+1个元素的最前面的那个元素进行交换,也就是第i个交换,直到i=n-1. 通俗的话来说就是,每一趟排序就是从为排好序的元素中选择一个最小的元素,将该元素与所有未排好的元素的第一个元素交换。 另外,也可以看成是增加有序集合的过程,集合从一个最小的元原创 2017-12-27 09:22:45 · 161 阅读 · 0 评论 -
顺序表的就地逆置
顺序表的就地逆置顺序表的就地逆置例:编写一个函数,实现顺序表的就地逆置,即利用原表的存储空间将顺序表逆置。题目分析: 要实现长度为length的顺序表的就地逆置,需要一个临时变量tmp作为缓冲区,同时要设置两个指针变量low和high分别指向顺序表的首尾。操作如下: (1)先将low指向的内容放入缓冲区tmp中。 (2)再将high指向的内容放到low指向的内存单元。 (3)将缓冲区的内容放原创 2017-12-27 17:14:52 · 6308 阅读 · 0 评论 -
魔王语言翻译
魔王语言翻译计算机实现魔王语言翻译问题描述: 魔王的语言是由以下两种形式的规则由人的语言逐步抽象上去的。 (1)α–>β(1)β(2)β(3)….β(m) (2)(θδ(1)δ(2)δ(3)…δ(n))–>θδ(n)θδ(n-1)…θδ(1)θ (括号内数字为下标),上面的规则中,从左到右表示将魔王的语言翻译成人类的语言。魔王语言和人类语言按照该语原创 2017-12-27 21:32:04 · 1875 阅读 · 0 评论 -
动态数列排序
动态数据排序动态数据排序题目要求 编写一个c程序,实现这样的功能:从键盘输入任意个整数,以0作为结束标志,对这个整数序列从小到大排序,并输出排序后的结果。题目分析 要实现动态数列排序,首先要选择好数据的存储结构。如果采用静态的线性存储结构,就无法实现此功能。因为静态线性存储结构的内存空间是开辟在内存的静态区,也就是栈内存上,它是在程序编译时就分配好了的,因此无法在程序运行时改变空间大小。 可以原创 2017-12-29 11:47:18 · 433 阅读 · 1 评论 -
堆排序
堆堆排序核心思想核心问题理解堆排序应把握以下几点堆堆排序是简单选择排序的一种改进。下面先说一下什么是堆,再来说堆排序。 1.堆:具有n个数据元素的序列{k(1)k_{(1)},k(2)k_{(2)},k(3)k_{(3)},…,k(n)k_{(n)}},当且仅当满足 a.k(i) k_{(i)}>=k(2i)k_{(2i)}且k(i)k_{(i)}>=k原创 2017-12-25 20:42:24 · 263 阅读 · 0 评论 -
快速排序
在内部排序中,快速排序被认为是目前最好的一种排序。快速排序算法的基本思想:人的思维导向: 在要排序序列中任选取一个元素,把该元素称为基准元素或支点(枢轴),把小于等于支点的所有元素都移到支点前面(序列左边),把大于支点的所有元素都移到支点后面(序列右边),这样就使得支点所处的位置恰为排序的最终位置,并且把总序列分为前后两个子序列,上述称为一趟快速排序或是一次划分(所以我个人又把该原创 2017-12-25 15:40:00 · 289 阅读 · 0 评论