算法
姜皓
胸藏文墨怀若谷 腹有诗书气自华
展开
-
算法(02)--回溯算法详解
@[TOC](回溯算法详解)解决⼀个回溯问题,实际上就是⼀个决策树的遍历过程。你只需要思考 3个问题:1、路径:也就是已经做出的选择。2、选择列表:也就是你当前可以做的选择。3、结束条件:也就是到达决策树底层,⽆法再做选择的条件。如果你不理解这三个词语的解释,没关系,我们后⾯会⽤「全排列」和「N 皇后问题」这两个经典的回溯算法问题来帮你理解这些词语是什么意思。代码⽅⾯,回溯算法的框架:result = []def backtrack(路...原创 2020-11-17 10:51:35 · 359 阅读 · 0 评论 -
算法(01)--动态规划详解
动态规划详解《斐波那契数列》--- 主要是让你明⽩什么是重叠⼦问题**1.1) 暴⼒递归1.2) 带备忘录的递归解法1.3) dp 数组的迭代解法《凑零钱问题 》--- 主要是让你明⽩什么是最优⼦结构**2.1) 暴⼒递归2.2) 带备忘录的递归2.3) dp 数组的迭代解法总结动态规划问题的⼀般形式就是求最值。动态规划其实是运筹学的⼀种最优化⽅法,只不过在计算机问题上应⽤⽐较多,⽐如说让你求最⻓递增⼦序列 ,最⼩编辑距离呀等等。 既然是要求最值,核⼼问题是什么呢?求解动态规划的核⼼问题是穷举。因为要求原创 2020-10-14 13:54:14 · 621 阅读 · 5 评论 -
重学数据结构与算法(02)--将时间复杂度转换成空间复杂度
将时间复杂度转换成空间复杂度1)时间昂贵、空间廉价2)数据结构连接时空3)降低复杂度的案例例一例二4)总结面试的过程中,常常会遇到考察手写代码的场景,通常面试官会追问:“这段代码的时间复杂度或者空间复杂度,是否还有降低的可能性?”如果没有经过专门的学习或训练,应聘者只能在各种漫无目的的尝试中去寻找答案。别忘了,代码效率优化就是要将可行解提高到更优解,最终目标是:要采用尽可能低的时间复杂度和空间复杂度,去完成一段代码的开发。你可能会困惑,优化代码需要积累非常多的实际经验,初学者通常很难找到最优的编码解决原创 2020-05-22 11:05:23 · 1071 阅读 · 5 评论 -
重学数据结构与算法(01)--复杂度:如何衡量程序运行的效率?
复杂度:如何衡量程序运行的效率?1)复杂度是什么2)计算复杂度3)时间复杂度与代码结构的关系4)降低时间复杂度的必要性5)总结当你在大数据环境中开发代码时,你一定遇到过程序执行好几个小时、甚至好几天的情况,或者是执行过程中电脑几乎死机的情况:如果这个效率低下的系统是离线的,那么它会让我们的开发周期、测试周期变得很长。如果这个效率低下的系统是在线的,那么它随时具有时间爆炸或者内存爆炸的可能性。因此,衡量代码的运行效率对于一个工程师而言,是一项非常重要的基本功。本课时我们就来学习程序运行效率相关的度原创 2020-05-22 10:18:33 · 904 阅读 · 0 评论 -
Java算法(02) -- 最小栈的实现
最小栈的实现1、题目分析方法一【错误】方法二【正确】2、代码实现1、题目分析实现一个栈,该栈带有出栈(pop)、入栈(push)、取最小元素(getMin)3 个方法,保证这3个方法的时间复杂度都是O(1)。方法一【错误】方法流程:创建一个整型变量min,用来存储栈中的最小元素;当第1个元素进栈时, 把进栈元素赋值给min,即把栈中唯一的元素当做最小值之后每当一个新元素进栈,就让...原创 2020-04-08 19:46:59 · 362 阅读 · 4 评论 -
图解排序算法(06) -- 桶排序
桶排序1、初识桶排序2、桶排序代码实现时间复杂度分析3、排序总结1、初识桶排序每一个桶(bucket)代表一个区间范围,里面可以承载一个或多个元素,假设有一个非整数数列如下:4.5,0.84,3.25,2.18,0.5桶排序的工作原理:第1步,创建桶,并确定每一个桶的区间范围具体需要建立多少个桶,如何确定桶的区间范围,有很多种不同的方式。这里创建桶数量等于原始数列的元素数量,除最...原创 2020-04-02 20:49:36 · 400 阅读 · 0 评论 -
图解排序算法(05) -- 计数排序
计数排序1、初识计数排序2、计数排序的代码实现3、计数排序优化4、计数排序优化代码实现5、计数排序局限性1、初识计数排序【假设数组中有20个随机整数,取值范围为0~10,要求用最快的速度把这20个整数从小到大进行排序】考虑到这些整数只能够在0、1、2、3、4、5、6、7、8、9、10这11个数中取值,取值范围有限。所以可以根据这有限的范围,建立一个长度为11的数组,数组下标从0到10,元素初...原创 2020-03-30 20:35:31 · 465 阅读 · 0 评论 -
图解排序算法(04) -- 堆排序
堆排序1、初识堆排序2、堆排序代码实现3、堆排序总结1、初识堆排序二叉堆的特性:最大堆的堆顶是整个堆中的最大元素最小堆的堆顶是整个堆中的最小元素以最大堆为例,如果删除一个最大堆的堆顶(并不是完全删除,而是跟末尾的点交换位置),经过自我调整,第2大的元素就会被交换上来,成为最大堆的新堆顶,如下图:如上图所示,在删除值为10的堆顶节点后,经过调整,值为9的新节点就会顶替上来;在删除值...原创 2020-03-30 00:05:27 · 193 阅读 · 0 评论 -
图解排序算法(03) -- 彻底搞懂快速排序
快速排序1、初识快速排序使用分治法的优势2、基准元素的选择3、元素的交换双边循环法(递归)双边循环法代码实现单边循环法(递归)单边循环法代码实现1、初识快速排序同冒泡排序一样,快速排序也属于交换排序,通过元素之间的比较和交换位置来达到排序的目的。不同的是:冒泡排序在每一轮中只把1个元素冒泡到数列的一端快速排序则在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移...原创 2020-03-28 16:02:41 · 521 阅读 · 1 评论 -
图解排序算法(02) -- 鸡尾酒排序
鸡尾酒排序1、简述鸡尾酒排序2、鸡尾酒排序代码实现3、鸡尾酒排序优缺点1、简述鸡尾酒排序在上一篇博文《你不知道的冒泡排序》中介绍了冒泡排序,而【鸡尾酒排序】可以看做是【升级版的冒泡排序】,相比较而言鸡尾酒排序的元素比较和交换过程是双向的!例:8个数字组成一个无序数列{2,3,4,5,6,7,8,1},对其进行从小到大的排序冒泡排序过程如下:上述过程的弊端:元素2、3、4、5、6、7、...原创 2020-03-26 20:14:53 · 323 阅读 · 0 评论 -
图解排序算法(01) -- 你不知道的冒泡排序
冒泡排序1、初识冒泡排序2、冒泡排序的代码实现3、冒泡排序的初步优化4、冒泡排序的进阶优化1、初识冒泡排序冒泡排序的英文是bubble sort,它是一种基础的交换排序;冒泡排序每一个元素都可以根据自身大小,一点一点地向着数组的一侧移动。例:有8个数字组成一个无序数列{5,8,6,3,9,2,1,7},希望按照从小到大的顺序对其进行排序按照冒泡排序的思想,要把相邻的元素两两比较,当...原创 2020-03-25 09:49:40 · 265 阅读 · 0 评论 -
1)初识算法
什么是算法在计算机领域里,算法是一系列程序指令,用于处理特定的运算和逻辑问题衡量算法优劣的主要标准是时间复杂度和空间复杂度什么是数据结构数据结构是数据的组织、管理和存储格式,其使用目的是为了高效地访问和修 改数据。数据结构包含数组、链表这样的线性数据结构,也包含树、图这样的复杂数据 结构。什么是时间复杂度时间复杂度是对一个算法运行时间长短的量度,用大O表示,记作 T(n)=O(f(...原创 2019-12-24 19:43:03 · 355 阅读 · 0 评论 -
突破算法面试(01)——什么是优秀的算法面试
什么是优秀的算法面试一、简述算法面试对一组数据进行排序考虑要点:·有没有可能包含有大量重复的元素?·是否大部分数据距离它正确的位置很近?是否近乎有序?·是否数据的取值范围非常有限?比如对学生成绩排序。·是否需要稳定排序?·是否是使用链表存储的?·数据的大小是否可以装载在内存里?什么是“正确"的回答一个算法问题:正确还包含对问题的独到见解;优化;代码规范;容错性;如果是...原创 2019-01-11 17:44:02 · 366 阅读 · 0 评论 -
Java 八大排序算法总结
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。插入排序思想:每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的子序列的合适位置,直到全部插入排序完为止。关键问题:在前面已经排好序的序列中找到合适的插入位置。方法:直接插入排序 二分插...转载 2018-09-17 09:08:04 · 221 阅读 · 0 评论