
数据结构与算法
文章平均质量分 91
斜光
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
软件设计师3.数据结构
1 概述数据结构是数据元素的集合或者数据对象之间的关系和构造方法Data_Structure = (D,R)D是数据元素的集合,R是该集合中所有元素之间的关系的有限集合数据逻辑结构:反映数据元素之间的逻辑关系的结构(前后件关系,与存储位置无关)数据存储结构:顺序,链接,索引,散列数据逻辑结构2 线性表N个元素的有限序列,N>=02.1 顺序存储结构:顺序表依次存储...原创 2020-02-11 11:09:45 · 486 阅读 · 0 评论 -
基本排序算法
1 冒泡排序原理它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。排序步骤比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元...原创 2020-02-11 10:31:42 · 138 阅读 · 0 评论 -
数据结构与算法:时间复杂度的计算
最坏时间复杂度分析算法时,存在几种可能的考虑:算法完成工作最少需要多少基本操作,即最优时间复杂度算法完成工作最多需要多少基本操作,即最坏时间复杂度算法完成工作平均需要多少基本操作,即平均时间复杂度对于最优时间复杂度,其价值不大,因为它没有提供什么有用信息,其反映的只是最乐观最理想的情况,没有参考价值。对于最坏时间复杂度,提供了一种保证,表明算法在此种程度的基本操作中一定能完成工作。...原创 2020-02-11 09:53:08 · 369 阅读 · 0 评论 -
9. 二分查找
1. 实现及特性前提目标函数单调性(有序)存在上下界(bounded)能够通过索引访问(index accessible)代码模板2 算法题解1)x 的平方根在这里插入代码片2)有效的完全平方数/* * @lc app=leetcode.cn id=33 lang=java * * [33] 搜索旋转排序数组 * 二分查找, */// @lc code=...原创 2019-12-29 22:13:14 · 126 阅读 · 0 评论 -
8. 贪心算法(Greedy)
1 实现与特性每一步中都采取当前状态下最好或最优的解法,从而使全局解法最优与动态规划的不同是,他对于每个子问题的解决方案都会做出选择,不能回退。而动态规划则会保存之前的运算结果 ,并根据以前的结果对当前进行选择,能够退回所有子方案最优不一定能全局最优对于工程和生活中的问题贪心算法一般不能得到我们想得到的答案1.1 什么情况能用贪心算法问题能够分成最优子问题来解决,子问题的最优解能...原创 2019-12-29 16:35:09 · 247 阅读 · 1 评论 -
6. 分治、回溯
1 实现和特性1.1 分治(递归的一种)先拆分为子问题,最后子结果合并例如:代码模板1.2 回溯(Backtracking)采用试错的思想,尝试分步地去解决一个问题在分步解决问题的过程中,发现现有分步结果无效时,将取消上一步甚至几步的计算再通过其他可能的分步方式再次尝试解决结果:找到一个可能存在正确答案尝试了所有可能分步后,没有答案最坏时间复杂度为指数级典型问题:...原创 2019-12-29 14:15:05 · 231 阅读 · 0 评论 -
7. 深度优先搜索和广度优先搜索
1. 实现和特性定义搜索-遍历每个节点要访问且仅访问一次对结点的访问顺序深度优先(depth first search)广度优先(breadth first search)1.1 深度优先搜索DFS代码(递归写法)及遍历顺序非递归写法def DFS(self, tree): if tree.root is None: return [] visi...原创 2019-12-29 14:13:58 · 277 阅读 · 1 评论 -
5. 泛型递归、树的递归
树的面试题解法一般都是递归,因为结点的定义就是以递归方式进行重复性(自相似性)二叉搜索树:左子树小于根节点,右子树大于根节点,且左右子树具有相同特征1 递归( recursion)本质类似于循环,通过循环体进行现实生活中的重复性电影盗梦空间:向下进入不同的梦境,向上回到原来的一层通过声音同步回到上一层每一层的内容都是一份拷贝,主角(参数)进入不同层次梦境(发生并携带变化)...原创 2019-12-22 21:25:42 · 496 阅读 · 0 评论 -
4.树、二叉树、二叉搜索树
1 实现和特性链表的查询时间复杂度慢,所以有跳表优化加速方式:升维链表中next指向(存放)多个结点出现树的原因1.1 树结点的定义二叉树的遍历(Pre-order、In-order、Post-order)基于递归前序遍历:根-左-右中序:左根右后序遍历:左右根图区别:Linked List(链表)就是特殊的Tree(树)Tree是特殊化的Graph图(没有环)...原创 2019-12-21 21:51:53 · 146 阅读 · 0 评论 -
3、哈希表、映射与集合
1 实现与特性1.1 哈希表(Hash Table 散列表)是根据关键码值(Key value)而直接进行访问的数据结构通过把关键值映射到表中一个位置来访问记录,加快了查找速度这个映射函数叫做哈希(散列函数(Hash Function),存放记录的数组叫做哈希表(或散列表)1)实际应用电话号码簿用户信息表缓存(LRU Cache)键值对存储(Redis)2)实现原理k...原创 2019-12-19 20:40:50 · 1041 阅读 · 0 评论 -
2.栈、队列
1 栈与队列1.1 双端队列(Deque: Double-End Queue):相当于一个Stack和Queue的结合1.2 优先队列(PriorityQueue )底层具体实现的数据结构较为多样和复杂:heap(堆)、bst、treap1.3 特点与时间复杂度Stack:先入后出;添加、删除皆为 O(1)Queue:先入先出;添加、删除皆为 O(1)Deque:两端可以进出;...原创 2019-12-19 20:40:34 · 103 阅读 · 0 评论 -
1、数组、链表与跳表
1 数组(Array)数组:Array,是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间存放元素。就像是一排出租屋,有100个房间,从001到100每个房间都有固定编号,通过编号就可以快速找到租房子的人。简单的说,采用该结构的集合,对元素的存取有如下的特点:查找元素快:通过索引,可以快速访问指定位置的元素增删元素慢指定索引位置增加元素:需要创建一个新数组,将指定...原创 2019-12-10 20:59:18 · 404 阅读 · 0 评论