
数据结构与算法
文章平均质量分 96
Rookiekk
这个作者很懒,什么都没留下…
展开
-
数据结构与算法:排序算法的稳定性以及各性能比较python实现
招聘笔试中经常会考到排序算法,在此做一个总结。一、算法概念1.排序算法的稳定性假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。1.简单选择排序一趟简单排序的操作为:通过n-i次...原创 2019-02-28 17:37:56 · 346 阅读 · 0 评论 -
算法设计:动态规划问题
适合采用动态规划(dynamic programming)方法的最优化问题中的两个要素:最优子结构和重叠子问题。最优子结构:用动态规划求解最优化问题的第一步就是刻画最优解的结构,如果一个问题的解结构包含其子问题的最优解,就称此问题具有最优子结构性质。因此,某个问题是否适合应用动态规划算法,它是否具有最优子结构性质是一个很好的线索。使用动态规划算法时,用子问题的最优解来构造原问题的最优解。因...原创 2019-08-29 19:49:02 · 570 阅读 · 0 评论 -
数据结构:二分查找python实现
二分查找是分而治之策略很好的例子,这里给出了两种实现,其中一种是使用递归方式实现。#二分法#递归查找def Binary_search(alist, item, first, last): found = False while first <= last and not found: mid = (first + last) // 2 ...原创 2019-08-30 10:10:11 · 335 阅读 · 0 评论 -
数据结构:堆python实现与堆排序
一、堆的定义堆是一种完全二叉树,有最大堆和最小堆两种。最大堆: 对于每个非叶子节点 V,V 的值都比它的两个孩子大,称为 最大堆特性(heap order property) 最大堆里的根总是存储最大值,最小的值存储在叶节点。 最小堆:和最大堆相反,每个非叶子节点 V,V 的两个孩子的值都比它大。二、python实现在我们的堆实现中,我们通过创建一个完整二叉树来保持树平...原创 2019-03-29 16:03:05 · 420 阅读 · 0 评论 -
算法中P,NP和NPC问题
一、概念P问题:在多项式时间内可解的问题。NP(Nondeterministic polynominal非确定性多项式)问题:在多项式时间内验证得出一个正确解的问题。P类问题是NP问题的子集,因为存在多项式时间解法的问题,总能在多项式时间内验证他。NPC问题:一个问题约化为另一个问题,时间复杂度增加了,问题的应用范围也增大了。通过对某些问题的不断约化,我们能够不断寻找复杂度更高,但...转载 2019-03-11 16:03:33 · 1359 阅读 · 0 评论 -
数据结构:哈希表函数构造和冲突解决方法
哈希表哈希函数:记录的存储位置和它的关键字之间建立一个确定的对应关系。冲突:对不同的关键字可能得到同一哈希地址,这种现象称为冲突。哈希函数构造方法1.直接定址法取关键字或关键字的某个线性函数值为哈希地址,即:或2.数字分析法3.平方取中法取关键字平方后的中间几位为哈希地址。这是一种较常用的构造哈希函数的方法。一个数平方后的中间几位数和数的每一位都相关。4.折...原创 2019-03-15 15:29:38 · 1014 阅读 · 0 评论 -
数据结构:线性数据结构(3)-deques(栈,队列,deques, 列表)
deque(也称为双端队列)是与队列类似的项的有序集合。即使 deque 可以拥有栈和队列的许多特性,它不需要由那些数据结构强制的 LIFO 和 FIFO 排序。这取决于你如何持续添加和删除操作。1.Deque抽象数据类型deque 抽象数据类型由以下结构和操作定义。如上所述,deque 被构造为项的有序集合,其中项从首部或尾部的任一端添加和移除。下面给出了 deque 操作。Dequ...原创 2019-03-04 21:00:37 · 427 阅读 · 0 评论 -
数据结构:线性数据结构(2)-队列(栈,队列,deques, 列表)
队列:FIFO1.队列的抽象数据类型队列抽象数据类型由以下结构和操作定义。如上所述,队列被构造为在队尾添加项的有序集合,并且从队首移除。队列保持 FIFO 排序属性。队列操作如下:Queue() 创建一个空的新队列。 它不需要参数,并返回一个空队列。 enqueue(item) 将新项添加到队尾。 它需要 item 作为参数,并不返回任何内容。 dequeue() 从队首移除项。它...原创 2019-03-04 20:33:40 · 292 阅读 · 0 评论 -
数据结构:线性数据结构(1)-栈(栈,队列,deques, 列表)
栈,队列,deques, 列表是一类容器,他们数据项之间的顺序由添加或删除的顺序决定,一旦一个数据项被添加,它相对于前后元素一直保持该位置不变。注入此类的数据结构称为线性数据结构。栈栈(栈,队列,deques, 列表)是一个项的有序集合:栈的底部很重要,因为在栈中靠近底部的项是存储时间最长的。最近添加的项是最先会被移除的。这种排序原则有时被称为 LIFO,后进先出。1.栈的抽象数据类型...原创 2019-03-04 17:35:34 · 382 阅读 · 0 评论 -
数据结构:静态查找动态查找
概念1、静态查找首先无论是静态查找还是动态查找,都要有查找的对象,也就是包含很多同类型数据的“表”,这个“表”可以理解为一个由同类型数据元素组成的一个“集合”,该集合可以用各种容器来存储,例如数组、链表、树等,我们统称这些存储数据的数据结构为——查找表。可见,查找表有时是我们传统意义的表,有时候是很复杂的一种结构。静态查找就是我们平时概念中的查找,是“真正的查找”。之所以说静态查找是真...原创 2019-03-15 15:32:10 · 14108 阅读 · 0 评论 -
数据结构:线性数据结构(4)-列表(栈,队列,deques, 列表)
一、列表1.1列表的抽象数据类型列表是项的集合,其中每个项保持相对于其他项的相对位置。无序列表的结构是项的集合,其中每个项保持相对于其他项的相对位置。下面给出了一些可能的无序列表操作。List() 创建一个新的空列表。它不需要参数,并返回一个空列表。 add(item) 向列表中添加一个新项。它需要 item 作为参数,并不返回任何内容。假定该 item 不在列表中。 remove...原创 2019-03-05 10:58:43 · 251 阅读 · 0 评论 -
数据结构与算法:树与二叉树python实现
最近复习一遍数据结构与算法,做一些笔记,大家可以一起复习。一、树的一些容易混淆的定义:结点层:根结点的层定义为1;根的孩子为第二层结点,依此类推;树的深度(或高度):树中最大的结点层;满二叉树:这个定义国内和国外有较大的区别:国内教程定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,...原创 2019-02-28 17:50:55 · 553 阅读 · 0 评论 -
数据结构与算法:已知二叉树两种遍历序列,求第三种遍历序列
在笔试题目中经常碰到此类题目,已知先序遍历序列和中序遍历序列,求后序序列或者已知中序序列和后序序列,求先序遍历序列。其中若已知先序序列和后序序列,无法唯一确定一棵树,所以就无法得知中序序列。1.已知先序遍历序列和中序遍历序列,求后序序列递归的去求解,每次找到子树的根节点与子树序列来求解。2.已知中序序列和后序序列,求出先序遍历序列方法跟前边类似,要根据后后序遍历序列判断根节点...原创 2018-12-11 20:29:46 · 1505 阅读 · 0 评论