算法
文章平均质量分 57
zy010101
会写一点代码
展开
-
算法效率分析基础
一般而言分析算法效率的方式有两种,即:时间效率和空间效率。时间效率也称为时间复杂度;空间效率也称为空间复杂度。在计算机技术发展的几十年中,空间资源变得不是非常重要了,因此在一般的算法分析中,讨论的主要是时间复杂度,当然空间复杂度的分析也是如此。在算法分析中,我们不使用时间的标准单位(例如:秒,毫秒等)来衡量算法的快慢,而是使用基本操作的次数来衡量时间复杂度。并且,我们在分析时间复杂度的时候仅关......原创 2022-08-15 22:48:09 · 7177 阅读 · 1 评论 -
小易买苹果
题目描述小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。解法这个题目很容易就可以写出下面的式子:6x+8y=n;非常直观的解法就是求解这个线性丢番图方程。这个方程的求解可以使用扩展欧几里得算法。我们求出其x的一个最小非负整数值,...原创 2019-03-10 16:27:37 · 392 阅读 · 0 评论 -
欧几里得算法(辗转相除法),扩展欧几里得算法,乘法逆元,最小正整数解
欧几里得算法是用来求解两个不全为0的非负整数m和n的最大公约数的一个高效且简单的算法。该算法来自于欧几里得的《几何原本》。数学公式表达如下:对两个不全为0的非负整数不断应用此式:gcd(m,n)=gcd(n,m mod n);直到m mod n为0时。m就是最大公约数证明:我们假设有a,b两个不全为0的数,令 a % b = r; 那么有 a = kb + r. 假设a,b的公约数是d。...原创 2019-03-10 15:29:22 · 5110 阅读 · 1 评论 -
最大连续子序列和问题
第一次看《数据结构与算法分析——C语言描述》这本书的时候,被书中一上来就给的最大子序列和问题给直接镇住了。直观感觉就是好难,好牛逼。问题描述:给定整数k1,k2,k3,...,kn,求从第i个数到第j个数的最大值。(如果所有整数均为负数,那么最大子序列和规定为0)根据题目描述,最直接的算法就是穷举所有的从i到j的和,比较它们的大小,留下最大的那个和,就是我们所求的最大子序列和。算法1:...原创 2018-09-02 17:17:53 · 726 阅读 · 0 评论 -
插入排序与希尔排序
插入排序描述:有一个数组num[n];它有n个元素,假设其中n-1已经排好序了,那么把剩余的那个元素插入到合适的位置即可,这样就完成了排序。根据这个思想,很明显的可以使用递归来完成它。下面是递归版本的代码.#include <iostream>using namespace std;void InsertionSort(int *num, int n);int temp;...原创 2018-08-21 17:21:07 · 354 阅读 · 0 评论 -
分治法
分治法不仅仅是应用于计算机学科,还涉及到了各行各业。分治意为分而治之。即就是将原问题分解为规模更小的,但是形式上与原问题相同的子问题来解决。对于较小的问题求解起来也是比较容易的,在有必要的时候,可以将子问题的解进行合并以得到原问题的解。归并排序就是分治思想的一种体现,归并排序的操作如下,假设给定一个数组num,需要对它排序,首先将数组分成两半部分,对这两半部分分别进行归并排序。最后将两个排好序...原创 2018-08-06 13:34:56 · 676 阅读 · 0 评论 -
递归
递归是一种重要的数学思想,我们有时候会见到一个函数是用它本身定义的,这个时候我们就称它是递归的。现代的大多数语言都是支持递归的。递归有两个重要的问题需要确定。*首先*你必须要有某些基准情况,基准情况不需要递归就能解决;*其次*递归在回溯的时候一定能朝着基准方向前进。我们来举个例子说明一下递归: 这段代码是用来求阶乘的。当然这里只是举例子的时候对数值运算使用了递归,通常对于数值计算不要去使用递归...原创 2018-08-03 14:24:49 · 3763 阅读 · 0 评论 -
算法简介
程序设计 = 算法 + 数据结构;这句话指出了程序设计的灵魂所在。我先来了解一下算法。什么是算法?目前没有统一的定义。但是基本含义是有的,即:算法是一系列解决问题的明确指令,对于符合一定顶范围的输入,他能在有限的时间内给出有效的输出。这就要求算法的每一个步骤都必须没有歧义。 必须确定算法所适用的范围。 同一问题可能存在多种算法。 不同的算法解题的速度可能存在差异。初学C语言的时候,我就...原创 2018-08-13 16:53:37 · 676 阅读 · 0 评论 -
凸包问题
定义1:平面上的点集,如果以该集合中的任意两点P和Q为端点构成的线段属于该集合,就称该集合是凸的。定义2:一个点集S的凸包是包含S的最小凸集合。定理:任意包含n > 2个点的集合S的凸包是以S中的某些点为顶点的凸多边形。(如果所有点是共线的,多边形退化为线段)因此,直观看来,任意的凸多边形都是凸集合。凸包问题是为一个包含n个点的集合构造一个凸包。根据上面的定理设计了一个基...原创 2018-08-19 13:40:42 · 1825 阅读 · 0 评论 -
带锁的门
带锁的门在走廊上有N个带锁的门,从1到N依次编号。最初所有的门都看关着的。我们从门前经过n次,每一次都从1号门开始。在第i次经过时(i = 1,2,...,n)。我们改变i的整数倍号锁的状态:如果门是关的,就打开它;如果门是开的,就关闭它。在最后一次经过后,哪些门是关上的,哪些门是开着的?有多少开着的门。题目来自于《算法设计与分析基础》。解决首先,我们来尝试收购小规模来模拟一下这个...原创 2019-03-10 19:29:40 · 1802 阅读 · 0 评论