算法
文章平均质量分 87
C+ 安口木
https://github.com/ytanck/
生命不息,coding不止...
展开
-
说说你对算法中时间复杂度,空间复杂度的理解?如何计算?
算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别衡量不同算法之间的优劣主要是通过时间和空间时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述通常会遇到一种情况,时间和空间维度不能够兼顾,需要在两者之间取得一个平衡点是我们需要考虑的。原创 2024-01-24 09:52:16 · 419 阅读 · 0 评论 -
说说你对数据结构的理解?有哪些?区别?
树是典型的非线性结构,在树的结构中,有且仅有一个根结点,该结点没有前驱结点。在程序设计中,为了处理方便, 一般情况把具有相同类型的若干变量按有序的形式组织起来,这些按序排列的同类数据元素的集合称为数组。跟栈基本一致,也是一种特殊的线性表,其特性是先进先出,只允许在表的前端进行删除操作,而在表的后端进行插入操作。堆是一种特殊的树形数据结构,每个结点都有一个值,特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。一种特殊的线性表,只能在某一端插入和删除的特殊线性表,按照先进后出的特性存储数据。原创 2024-01-23 10:58:38 · 949 阅读 · 0 评论 -
说说你对选择排序的理解?如何实现?应用场景?
其基本思想是:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置。和冒泡排序一致,相比其它排序算法,这也是一个相对较高的时间复杂度,一般情况不推荐使用。然后再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。但是我们还是要掌握冒泡排序的思想及实现,这对于我们的算法思维是有很大帮助的。个记录开始,找出后序关键字中最小的记录,然后放置在第。的时间复杂度,所以用到它的时候,数据规模越小越好。从上述也可以看到,选择排序是一种稳定的排序。,最后一次内循环比较1次。原创 2024-01-23 10:57:42 · 983 阅读 · 0 评论 -
说说你对快速排序的理解?如何实现?应用场景?
通过以上几步的排序,最后由子表{13,27,38}、{49}、{49}、{65}、{76,97}构成有序表:{13,27,38,49,49,65,76,97}将表格中大于 49 个放置于 49 的右侧,小于 49 的放置于 49 的左侧,假设完成后的无序表为:{27,38,13,49,65,97,76,49}以 49 为支点,将整个无序表分割成了两个部分,分别为{27,38,13}和{65,97,76,49},继续采用此种方法分别对两个子表进行排序。关于上述代码实现的快速排序,可以看到是稳定的。原创 2024-01-22 09:55:57 · 563 阅读 · 0 评论 -
说说你对归并排序的理解?如何实现?应用场景?
关于归并排序的稳定性,在进行合并过程,在1个或2个元素时,1个元素不会交换,2个元素如果大小相等也不会交换,由此可见归并排序是稳定的排序算法。归并排序(Merge Sort)是建立归并操作上的一种有效,稳定的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列,即先使每个子序列有序,再使子序列段间有序。上述归并分成了分、合两部分,在处理分过程中递归调用两个分的操作,所花费的时间为2乘。归并合过程中,每次得到的新的子表本身有序,所以最终得到有序表。原创 2024-01-22 09:55:09 · 491 阅读 · 0 评论 -
说说你对插入排序的理解?如何实现?应用场景?
向有序表中插入记录 5 时,同有序表中记录 7 进行比较,5<7,同时 5>3,所以插入到 3 和 7 中间。在插入排序中,当待排序数组是有序时,是最优的情况,只需当前数跟前一个数比较一下就可以了,这时一共需要比较。其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。从第二个数开始,插入一个元素1,然后和有序表中记录3比较,1<3,所以插入到记录 3 的左侧。向有序表插入记录 7 时,同有序表中记录 3 进行比较,3<7,所以插入到记录 3 的右侧。原创 2024-01-18 10:17:58 · 351 阅读 · 0 评论 -
说说你对堆的理解?如何实现?应用场景?
堆是一个完全二叉树堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值对于每个节点的值都大于等于子树中每个节点值的堆,叫作“大顶堆”对于每个节点的值都小于等于子树中每个节点值的堆,叫作“小顶堆”根据堆的特性,我们可以使用堆来进行排序操作,也可以使用其来求第几大或者第几小的值。原创 2024-01-18 10:17:19 · 399 阅读 · 0 评论 -
常用排序算法:插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序
常用排序算法:插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序原创 2024-01-15 15:52:33 · 985 阅读 · 0 评论 -
说说你对贪心算法、回溯算法的理解?应用场景?
贪心算法,又称贪婪算法,是算法设计中的一种思想其期待每一个阶段都是局部最优的选择,从而达到全局最优,但是结果并不一定是最优的举个零钱兑换的例子,如果你有1元、2元、5元的钱币数张,用于兑换一定的金额,但是要求兑换的钱币张数最少如果现在你要兑换11元,按照贪心算法的思想,先选择面额最大的5元钱币进行兑换,那么就得到11 = 5 + 5 + 1 的选择,这种情况是最优的但是如果你手上钱币的面额为1、3、4,想要兑换6元,按照贪心算法的思路,我们会 6 = 4 + 1 + 1这样选择,这种情况结果就不是最优的选择原创 2024-01-15 09:43:55 · 920 阅读 · 0 评论 -
什么是分而治之和动态规划?
是重叠子问题,当n = 1、2的时候,对应的值为2,这时候就通过可以使用一个数组记录每一步计算的结果,以此类推,减少不必要的重复计算。动态规划,同样是算法设计中的一种方法,是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。分而治之是算法设计中的一种方法,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。的,而分而治之的子问题是相互独立的。原创 2024-01-15 09:43:09 · 962 阅读 · 0 评论 -
什么是冒泡排序?如何实现?
并且从上述比较中看到,只有后一个元素比前面的元素大(小)时才会对它们交换位置并向上冒出,对于同样大小的元素,是不需要交换位置的,所以对于同样大小的元素来说,相对位置是不会改变的,因此, 冒泡排序是稳定的。时间复杂度是 O(N 2 ),相比其它排序算法,这是一个相对较高的时间复杂度,一般情况不推荐使用,由于冒泡排序的简洁性,通常被用来对于程序设计入门的学生介绍算法的概念。而在每轮排序中都需要对相邻的两个元素进行比较,在最坏的情况下,每次比较之后都需要交换位置,此时时间复杂度为。原创 2024-01-12 10:12:53 · 567 阅读 · 0 评论 -
什么是二分查找
如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。在计算机科学中,二分查找算法,也称折半搜索算法,是一种在有序数组中查找某一特定元素的搜索算法。实际上,除了有序的数组可以使用,还有一种特殊的数组可以应用,那就是轮转后的有序数组。对比普通的二分查找法,为了确定目标数会落在二分后的哪个部分,我们需要更多的判定条件。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束。如果在某一步骤数组为空,则代表找不到。原创 2024-01-12 10:11:41 · 793 阅读 · 0 评论