
算法
文章平均质量分 84
sindyra
这个作者很懒,什么都没留下…
展开
-
堆排序
本博客转自:https://www.cnblogs.com/lanhaicode/p/10546257.html非优快云博客,转载只为方便查看。堆排序之前的随笔写了栈(顺序栈、链式栈)、队列(循环队列、链式队列)、链表、二叉树,这次随笔来写堆1、什么是堆?堆是一种非线性结构,(本篇随笔主要分析堆的数组实现)可以把堆看作一个数组,也可以被看作一个完全二叉树,通俗来讲堆其实就是利用...转载 2020-02-09 17:27:49 · 189 阅读 · 0 评论 -
A*算法笔记
我们平常所见的深度优先和广度优先搜索算法都是直接搜索算法,这种是盲目式的搜索,直到搜索时遇到终点,或者搜索整个地图结束。而A*算法则是启发式搜索,这种搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标,它是通过启发函数引导算法的搜索方向。A*算法路径代价值计算:F = G + H; (启发函数)F:从起点经过当前点到到终点的代价值;G:从起点到...原创 2020-01-08 16:26:58 · 589 阅读 · 0 评论 -
快速排序(C++和C#实现)
三、快速排序(O(nlogn)、不稳定) 快速排序简称快排,是一种比较快的排序,适合基本无序的数据,为什么这么说呢?下面我说下快排的思路:思路一:设置两个指针:i和j,分别指向第一个和最后一个,i像后移动,j向前移动。选第一个数为标准(一般这样做,当然快排的关键就是这个“标准”的选取),从后面位置j开始,找到第一个比标准小的数,替换i所在的位置的数,然后i指向i后一个元素,再从位置i开始...原创 2019-12-18 16:55:06 · 407 阅读 · 1 评论 -
选择排序(C++实现)
二、选择排序(O(n^2)、不稳定) 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置(或末尾位置),直到全部待排序的数据元素排完。选择排序不稳定的原因: 选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的, 依次类推,直到第n-1个元素,第n个 元素不用选择了,因为只剩下...原创 2019-12-18 14:59:28 · 5451 阅读 · 0 评论 -
冒泡排序(C++实现)
二、冒泡排序(稳定、基本有序可达O(n),最坏情况为O(n^2)) 冒泡排序:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序不对就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到...原创 2019-12-18 14:51:32 · 546 阅读 · 0 评论 -
插入排序(C++实现)
一、直接插入排序(内部排序、O(n^2)、稳定) 原理:从待排序的数中选出一个来,插入到前面的合适位置。 基本思想是:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。插入排序(从小到大)一种容易理解...原创 2019-12-18 14:38:26 · 2310 阅读 · 0 评论 -
广度优先搜索(BFS)找寻最短路径
此文为转载,为方便自己阅读广度优先遍历寻路算法本身并不难,概括来说就是像雷达一样,一层一层进行寻找目标点。当找到目标点后进行回溯,回溯就是通过当前点找到前一个点,再通过前一个点找到前一个点的前一个点,如此直到起点就能输出整个路径了。从而找到最佳路径。也就是说每走一步都要找到到达该点的最短的路径,最终得到到达所有点的最短路径。废话不多说上代码。具体解释在代码后面Point.java...转载 2019-09-21 23:49:31 · 3965 阅读 · 0 评论 -
贪心算法与动态规划的区别与联系
参考博客:https://blog.youkuaiyun.com/Mr_tyting/article/details/77850365一、动态规划算法简介 动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。 1.基本思想与策略 动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问...转载 2019-09-21 10:02:34 · 6001 阅读 · 0 评论 -
深度优先搜索(DFS)遍历图找到出口
最近重新复习了一遍DFS,做下笔记代码运行效果图:代码:#include <iostream>using namespace std;#include <list>#include <stack>#include <Windows.h>int map[10][10]={ 1, 1, 1, 1, 1, 1, 1, 1, ...原创 2019-09-17 11:35:16 · 439 阅读 · 0 评论 -
求高精度幂(南阳OJ155题)
求高精度幂时间限制:3000 ms | 内存限制:65535 KB难度:2描述对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。现在要你解决的问题是:对一个实数R( 0.0< R < 99.999 ),要求写程序精确计算 R的 n 次方(Rn),其中n是整数并且 0 < =n<= 25。输入输入有...原创 2017-08-10 21:32:41 · 941 阅读 · 0 评论 -
算法题:搜索二维矩阵 II
搜索二维矩阵 II编写一个高效的算法来搜索mxn矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。 每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10...原创 2019-08-10 17:22:35 · 223 阅读 · 0 评论 -
算法题:求众数
求众数给定一个大小为n的数组,找到其中的众数。众数是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例1:输入: [3,2,3]输出: 3示例2:输入: [2,2,1,1,1,2,2]输出: 2解题思路:题目要求众数的个数一定是要大于整个数组的1/2的,所以众数的数量只有一个,利用摩尔投票法,遇到...原创 2019-08-10 17:15:21 · 2242 阅读 · 0 评论 -
算法题:只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4一开始想到的是用循环,双重循环遍历,每次取出一个数,然后拿它跟整个vector中所有数(除了自身比...原创 2019-08-09 19:59:45 · 235 阅读 · 0 评论 -
算法题:鸡蛋掉落(leetcode 887题)
题目:鸡蛋掉落你将获得K个鸡蛋,并可以使用一栋从1到N共有N层楼的建筑。每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。你知道存在楼层F,满足0 <= F <= N任何从高于F的楼层落下的鸡蛋都会碎,从F楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层X扔下(满...原创 2019-08-17 21:21:57 · 1599 阅读 · 0 评论 -
几种基本排序方法的比较
本文章部分图片和定义参考网络上他人博客,如有侵权立即删除。几种排序算法以及性能比较稳定性:指排序时相同大小元素的相对位置是否发生变化,不发生变化则说明该排序稳定。一、直接插入排序(内部排序、O(n^2)、稳定):小规模数据或者数据基本有序时高效 插入排序详细介绍:https://blog.youkuaiyun.com/sindyra/article/details/103597338...原创 2019-07-11 16:34:34 · 2142 阅读 · 0 评论 -
关于算法的评判时间复杂度和空间复杂度
算法的时间复杂度,用来度量算法的运行时间,记作: O(f(N))。它表示随着 输入大小N的增大,算法执行需要的时间的增长速度可以用 f(N) 来描述。上面概念可能比较抽象,下面我们用案例的方式来举例下,一般我们是先拿到f(N),然后来算下他的时间复杂度,一般我们只保留对函数增长速度较大的函数例如:1、f(N)=c(c是常数),我们称时间复杂度为O(1)2、f(N)=a*N+b(a和b是常数),我们称时间复杂度为O(N)原创 2019-06-20 12:06:13 · 412 阅读 · 1 评论