
【算法】
文章平均质量分 81
吉大秦少游
吉林大学硕士,研究兴趣为芯片数字设计
展开
-
算法-目录
文章目录排序算法Hash算法蒙特卡洛算法模拟运动和计算双指针与快慢指针排序算法快排和归并排序的复杂度相同,为什么都用快排而不用归排?为什么要分稳定排序和非稳定排序排序算法之懒人排序排序算法之冒泡排序排序算法之插入排序快速排序算法C++实现[评注版]各种排序算法的时间复杂度时间复杂度Hash算法胡凡《算法笔记》总结2——Hash散列算法笔记——15个瓶子,4只老鼠,测试哪瓶有...原创 2019-10-05 16:34:59 · 519 阅读 · 0 评论 -
排序算法之归并排序(C语言)
#include <stdio.h>#include <stdlib.h>void swap(int* p1,int* p2){ int tmp=*p1; *p1=*p2; *p2=tmp;}void printArray(const int* array,int size){ for(int i=0;i<size;i++)...原创 2019-10-31 08:23:54 · 320 阅读 · 0 评论 -
排序算法之懒人排序
排序算法很多,快速排序、堆排序、选择排序、冒泡排序等等。最近一周一直再看排序算法,多数比较容易理解,其中多数理解起来都比较容易,但是实现起来感觉堆排序比较麻烦,还要建堆和处理堆。再看快速排序的时候,突然想到如果根据一个基准值将其他数字分为大小两堆,再在两堆内继续实行二分比较……如果注意观察排好序的元素其下标和值在大小上的对应关系:下标小的元素其值也必定比较小。就比较好编程了,只要元素的下标大小...原创 2017-10-02 16:23:58 · 590 阅读 · 0 评论 -
排序算法之冒泡排序
冒泡排序思想:冒泡排序的思想是通过比较两个相邻数的大小,逐渐将大数或者小数往边界移动。类似于水中的气泡向水面上移动。//给定数组冒泡排序,每次冒泡排出最大的数#include <iostream>using namespace std;int main(){ int a[]={2,1,3,67,54,78,3}; for(int i=0;i<sizeof(...原创 2017-10-03 19:48:34 · 487 阅读 · 0 评论 -
排序算法之插入排序
插入排序思想:插入排序的思想是先假定a[0]已经排好,然后从a[1]~a[size-1]依次往里面插入。在插入过程中还要倒着插,这样比较省事。如果插入的数比要比较的数大,则放在右边;反之,放在左边。另外,按照上述思路,可能会出现多次调换的情况,处理的办法是先将比较之后要移动的数都往后面移动一位,最后再将要插入的数插入都移动之后出现的空档。这个处理很巧妙,也是插入排序的精华所在!//给定数组...原创 2017-10-04 17:40:00 · 395 阅读 · 0 评论 -
高效对有序数组/链表去重
题目分析显然,由于数组已经排序,所以重复的元素一定连在一起,找出它们并不难,但如果毎找到一个重复元素就立即删除它,就是在数组中间进行删除操作,整个时间复杂度是会达到 O(N^2)。而且题目要求我们原地修改,也就是说不能用辅助数组,空间复杂度得是 O(1)。其实,对于数组相关的算法问题,有一个通用的技巧:要尽量避免在中间删除元素,那我就先想办法把这个元素换到最后去。这样的话,最终待删除的元...原创 2019-09-26 22:32:40 · 374 阅读 · 0 评论 -
python羊车门问题的蒙特卡洛解法
羊车门问题羊车门问题描述:有3扇关闭的门,一扇门后停着汽车,另外两扇门后是山羊,主持人知道每扇门后是什么。参赛者首先选择一扇门。在开启它之前,主持人会从另外两扇门中打开一扇门,露出门后的山羊。此时,允许参赛者更换自己的选择。请问,参赛者更换选择后,能否增加猜中汽车的机会?通过设计并编写程序验证,并给出自己的解释。————————————————我认为会增加选中汽车的机会。原因如下:(1)...原创 2019-09-25 22:13:22 · 638 阅读 · 0 评论 -
Two Sum 问题——哈希算法
文章目录题目代码拓展题目这个问题的最基本形式是这样:给你一个数组和一个整数target,可以保证数组中存在两个数的和为target,请你返回这两个数的索引。比如输入nums = [3,1,3,6],target = 6,算法应该返回数组[0,2],因为 3 + 3 = 6。这个问题如何解决呢?首先最简单粗暴的办法当然是穷举了,这个解法非常直接,时间复杂度 O(N^2),空间复杂度 O(1)...原创 2019-09-30 09:43:34 · 1017 阅读 · 0 评论 -
为什么要分稳定排序和非稳定排序
稳定排序指的是相等的元素排序完成后,其顺序保持不变。用途例如:每周考试之后,按照分数高低进行排序,但是分数相同的同学怎么办呢?按照上次的分数来分高低。上次分数高的排在前面。班级同学排序,按照学号排序。现在要按照身高排序,如果身高相同,那么还是按照学号排序。作用所以稳定排序的作用是有两个排序关键字的时候,稳定排序可以让第一个关键字排序的结果服务于第二个关键字排序中数值相等的那些数。...原创 2019-10-05 16:19:33 · 527 阅读 · 0 评论 -
环形链表的判断方法及实现
目录题目方法1:普通查找法分析实现C++Python方法2:Hash列表分析实现C++python补充方法3:快慢指针分析实现C++在公众号看到一篇文章,如何判断链表有环?环是个什么东西,查了下,原来就是链表中有元素指向之前有过的元素。那么如何判断呢,查了下相关资料,将环形链表的判断方法做了一个梳理,并用Python和C++实现了一下,记录如下。不过由于数据结构不扎实,先用数组这种顺序存储来...原创 2019-07-14 10:54:46 · 848 阅读 · 0 评论 -
算法笔记——15个瓶子,4只老鼠,测试哪瓶有毒
看到今天一道算法题,就写了一下自己的思路,希望有大牛,看到这个题,能提出更好的想法,再进行交流学习,我只用了一点简单的C++ 进行实现有15个瓶子,其中最多有一瓶有毒,现在有四只老鼠,喝了有毒的水之后,第二天就会死。如何在第二天就可以判断出哪个瓶子有毒我的想法是,因为最多有一瓶有毒,所以只有,0瓶有毒,或者其中一瓶有毒,所以是16种状态,所以用4只老鼠的喝下水的存活状态标级 '0' 或...原创 2019-04-29 14:05:57 · 2906 阅读 · 0 评论 -
滑动窗口法介绍——类比数据结构“队列”
算法目的 前言 一个经典的问题 代码如下 总结 参考资料 算法目的滑动窗口法的命名非常形象。可以类比压栈或者队列来进行理解,即新加入的数据不断代替原来旧有的数据,不断迭代更新。该算法展示了如何将嵌套for循环在少数问题中转换为单个for循环,从而减少了时间的复杂性。前言一个经典的问题给一组大小为n的整数数组,计算长度为k的子数组的最大值我们希望的结果如下...转载 2018-08-08 00:11:53 · 1427 阅读 · 0 评论 -
胡凡《算法笔记》总结1——“进制转换”类型
在编程中,进制转换类型的题目有很多。比如时钟秒/货币兑换/二进制八进制转换,下面将常用的进制转换总结如下Q:对于一个P进制数转化为Q进制数的问题思路:一般而言你,先将P进制数转化为10进制数,再由10进制数转化为Q进制数。分成这两步。P进制转化为10进制只要注意到P进制不同位上的权值,利用权值与对应位上的乘积得到该位上的十进制数,再将各位上的十进制数累加即可。10进制数转化位Q进...原创 2018-12-11 10:50:24 · 790 阅读 · 0 评论 -
各种排序算法的时间复杂度
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。排序算法不稳定的含义是:在排序之前,有两个数相等. 但是在排序结束之后,它们两个有可能改变顺序.比如说: 在一个待排序队列中,A和B相等,且A排在B的前面,而排序之后,A排在了B的后面.这个时候,我们说这种算法是不稳定的.(只要有这种可能性,我们就说算法是不稳定的.)注:...原创 2018-12-11 14:16:09 · 22018 阅读 · 6 评论 -
时间复杂度
二分查找:O(log n)简单查找:O(n)快速排序:O(n log n)选择排序:O(n^2)旅行商问题:O(n!)原创 2018-12-22 16:01:55 · 264 阅读 · 0 评论 -
胡凡《算法笔记》总结2——Hash散列
目录1.定义及本质2.基本概念性质3.经典实例3.1常用HASH函数3.2构造方法1.定义及本质散列是常用的算法思想之一,散列的本质是一种数学映射,是输入(input)通过散列函数(hash function)映射到输出(output)的一种压缩变换。百科上是这样介绍散列的:关联数组是这样的数组,它的每个数据元素与一个键相对配对,该键用于识别数据元素。由于...原创 2018-12-11 14:02:53 · 537 阅读 · 0 评论 -
快速排序算法C++实现[评注版]
经常看到有人在网上发快速排序的算法,通常情况下这些人是在准备找工作,或者看<算法导论>这本书,而在他们发布的代码通常是差不多的版本,估计也是网上copy一下,自己改改,跑过了就算了,但是通常这样玩根本没有太大作用,如果到一家公司,给你一台不能上网的笔记本,20分钟,你是根本写不出来快速排序的算法的,当然除了那些死记硬背的兄弟。说说我写这篇文章的目的吧,记得有一天我想重新看看<...原创 2018-12-11 14:16:59 · 2187 阅读 · 0 评论 -
快排和归并排序的复杂度相同,为什么都用快排而不用归排?
快排和归排的复杂度都是O(n*log n),为什么都用快排而不用归排?看了《算法图解》之后,大致理解了是什么原因,真正的原因是:不可描述的常量导致使用快排而不是归排。好了,真正的解释是这样的:算法的每一步实际上都需要一个固定时间量,被称为常量。我们平时考虑时间复杂度的时候并不考虑常量的影响,但有时候常量的影响不可忽略,比如在这个问题上。但是大多数时候考虑复杂度的时候,可能还是不需要考虑...原创 2018-12-22 16:50:56 · 11447 阅读 · 4 评论