随笔分类 -  算法

1
摘要:bool BiggerFirst(string s1,string s2) { int size=s1.size(); for (int i = 0; i s2[i]) { return true; } else if (s1[i] makeNew(string s,char c) { string temp; temp.reserve(s.size()+1); ... 阅读全文
posted @ 2017-02-21 17:34 LT.C# 阅读(500) 评论(0) 推荐(0)
摘要:暴力: O(n6) O(n4)解法 动态规划 O(n4):肯定比上一个要小,估计是O(n3.5)左右,反正可以跑起来 动态规划O(n3) 阅读全文
posted @ 2017-02-20 17:26 LT.C# 阅读(240) 评论(0) 推荐(0)
摘要:int GetBigger(int x,int y){ int bigger=(x>y?x:y); return bigger;} int GetMax(int a[],int n){ int* start=new int[n]; int* max=new int[n]; start[n-1]=a[ 阅读全文
posted @ 2017-02-19 20:22 LT.C# 阅读(400) 评论(0) 推荐(0)
摘要:我们之前的查找要么是顺序查找,要么是折半查找,要么是基于二叉树的查找 然而,这些查找之中,元素在列表中的相对位置是随机的,与关键字之间并没有直接的关系,因此,在查找时需要通过比较来进行 现在,我们有一种牺牲空间来换取时间的方法,通过固定元素在列表中的相对位置,在关键字和元素位置之间建立直接的关系,获 阅读全文
posted @ 2016-12-05 18:24 LT.C# 阅读(266) 评论(0) 推荐(0)
摘要:关于B树,不想写太多了,因为花在基于树的查找上的时间已经特么有点多了,就简单写写算了,如果以后有需要,或者有时间,可以再深入写写 首先说一下,为什么要有B树,以及B树是什么,很多数据结构和算法的书上来就上B树的定义,然后讲基于B树的几个操作,什么插入啊,建立啊,分裂啊,最后写个查找算法了事 我想,请 阅读全文
posted @ 2016-12-05 15:54 LT.C# 阅读(821) 评论(0) 推荐(0)
摘要:一.二叉排序树 定义:1.如果左子树不为空,根节点的值大于他左子树所有节点的值 2.如果右子树不为空,根节点的值大于他右子树所有节点的值 3.左右子树也是一颗二叉排序树 要点:并没有规定左右子树的数目限制 也就是说,如图这种都是可以的,右边的那个她会退化为顺序查找 平衡二叉排序树,二叉判定树 在二叉 阅读全文
posted @ 2016-12-04 22:32 LT.C# 阅读(174) 评论(0) 推荐(0)
摘要:基于平衡二叉排序树的查找(AVL树) 这一篇博客里总结一下基于平衡二叉树的查找,为什么会有这种查找呢?平衡二叉树又是什么东西呢?现在就来仔细理解一下! 在基于二叉排序树的查找里,我们可以得到的时间复杂度是在O(log2(n)到O(n))之间,当二叉排序树只有一颗子树的时候,所谓的基于排序二叉树的查找 阅读全文
posted @ 2016-12-04 21:05 LT.C# 阅读(742) 评论(0) 推荐(0)
摘要:导论:首先,沿着二分查找的思路,我们构造一种二叉树来查找,这种二叉树的左子树结点都小于根节点,右子树节点都大于根节点,这样一来,所有结点算是都排好序了,接下来就可以查找 基于二叉排序树的查找 一.二叉排序树的定义 所谓二叉排序树是一个什么样的东西,我们得弄清楚,以下是二叉排序树的定义: 1.若它的左 阅读全文
posted @ 2016-12-04 14:08 LT.C# 阅读(2285) 评论(0) 推荐(0)
摘要:先介绍一个概念,平均查找长度(ASL)为每一个关键字出现的概率*查找该关键所进行比较的次数,所有关键字这样的值之和 一.简单查找 简单查找,也就是一个个地比较了,不多说 时间复杂度分析:while循环最少比较1次,最多比较n次,所以时间复杂度为O(n),另外,平均查找长度为(1+2+....n)*n 阅读全文
posted @ 2016-12-01 22:13 LT.C# 阅读(3887) 评论(0) 推荐(0)
摘要:选择类排序总结 所谓选择类排序的思想就是:从数组的中选出最大或最小的,通过多次选择最后达到排序的目的 首先是简单选择排序 思想:每趟扫描中,选出最小的数字放在最前面,然后从第二个数字开始扫描,直到只剩下最后一个数不需要扫描 经过分析可以得到,最坏时间复杂度为O(n²),最好时间复杂度为O(n²) 空 阅读全文
posted @ 2016-11-25 22:37 LT.C# 阅读(481) 评论(0) 推荐(0)
摘要:交换类排序总结 顾名思义,交换类排序,也就是通过一系列的交换元素过程,把原本逆序的元素交换为正确的顺序的排序方法 一.简单的交换类排序——冒泡排序 通过多趟的扫描,每趟扫描过程中,将相邻的元素中较大的交换至后面,这样每一趟结束时,最大的那个元素就“沉”到最后面,通过n-1趟的交换,直到只剩下一个元素 阅读全文
posted @ 2016-11-24 22:18 LT.C# 阅读(954) 评论(0) 推荐(0)
摘要:插入类排序的基本思想是: 取数组中的第一个数,因为只有一个数,所以认定他为有序的,将剩下的数依次插入有序序列中,并保持他为有序,插入完毕,排序完毕 插入排序的步骤可以分为三步: 1.找到应该插入的位置 2.将这个位置后面所有的数依次往后移动一个单位 3.将要插入的数字插入应该插入的位置 一.直接插入 阅读全文
posted @ 2016-11-24 19:26 LT.C# 阅读(440) 评论(0) 推荐(0)
摘要:今天在网上看到一个讲动态规划的文章,是以01背包为例的,这文章和书上的讲解非常不一样,令我眼前一亮,于是转载一下下~~~(说明一下,本人非常痛恨教材公式定理漫天飞,实际的讲解却讲得非常枯涩难懂,这种中国式的教育已经延绵了几千年了,现在中国的教材还是这个样子,讲清楚些明白些就那么难么?高中有个老师讲的 阅读全文
posted @ 2016-05-18 16:18 LT.C# 阅读(1061) 评论(0) 推荐(0)
摘要:#include #include #define len 10 void CountingSort(int* A,int A_Len,int * B,int k); int main() { int A[10]={1,5,9,0,7,8,6,4,3,2}; int* B=(int*)malloc(sizeof(int)*len); CountingSort(A,len,B,9); fo... 阅读全文
posted @ 2016-05-16 21:48 LT.C# 阅读(260) 评论(0) 推荐(0)
摘要:#include int q; int Parttion(int* a,int p,int r); void QuickSort(int* a,int p,int r); int main() { int i; int a[10]={1,4,2,7,3,9,8,6,0,5}; QuickSort(a,0,9); for(i=0;i<10;i++) printf("%d ",a[i]);... 阅读全文
posted @ 2016-05-16 16:27 LT.C# 阅读(270) 评论(0) 推荐(0)
摘要:以下是自己写的堆排序源码,已经测试通过,以后有时间总结, 阅读全文
posted @ 2016-04-14 13:34 LT.C# 阅读(237) 评论(0) 推荐(0)
摘要:自己敲出来的,先把代码贴上来,晚上有时间再写总结 阅读全文
posted @ 2016-04-09 14:45 LT.C# 阅读(307) 评论(0) 推荐(0)
摘要:渐进符号比较靠考键盘,哈哈,欧姆在键盘上找不到啊 直接插图片算了,比较要紧的一个概念是:渐进紧确:O(n)可能是渐进紧确的,也可能不渐进紧确,而o(n)一定不是渐进紧确的,唉,像绕口令似的,n=O(n)是渐进紧缺的,但n=O(n2)(n的平方,键盘不熟悉,敲不出来)不是渐进紧确的 阅读全文
posted @ 2016-03-31 20:23 LT.C# 阅读(312) 评论(0) 推荐(0)
摘要:在写归并排序之前,首先谈一谈分治的思想, 所谓分治:就是将一个比较复杂的问题分解为若干个规模较小的但是类似原问题的子问题,(解决)递归地求解这些这些子问题,再合并这些子问题的解来求解原问题 可分为三步: 分解:将原问题分解为若干个规模较小的但是类似原问题的子问题 求解:递归地求解这些这些子问题,然而 阅读全文
posted @ 2016-03-31 20:05 LT.C# 阅读(1452) 评论(0) 推荐(0)
摘要:插入排序的思想是构造一个循环不变式,可用扑克牌的例子来解释,左手为已经排好序的牌,右手为未排好序的牌,分别将右手中的牌依次一张一张地插入到左手,将左手中的每一张牌依次和这张牌比较,以此来确定这张牌在左手中的正确顺序,然后进行下一张牌,在这个过程中,左手中的牌始终是排好序的,即不变的,——称为循环不变 阅读全文
posted @ 2016-03-31 19:22 LT.C# 阅读(454) 评论(0) 推荐(0)

1