---基础算法学习---
基础、常用算法的学习与总结
咸鱼爱学习
普通的IT爱好者。微信公众号:咸鱼爱学习
展开
-
算法复杂度
引入编程处理问题时,可能有多种处理方法,那么衡量写出的程序的好坏的标准是什么?结果正确、运行速度快、结构优美,算法设计合理都可以作为衡量标准。什么是算法程序=算法+数据结构算法是对特定问题求解步骤的一种归纳描述。算法是解决问题的逻辑、方法、过程,数据结构是数据在计算机中的存储和访问方式。两者通常是紧密结合的。算法具有5个特征:输入有零或多个输入。可以没有输入,比如只进行一些输出任务。输出有一个或多个输出。程序可以没有输入,但一定要有输出。有穷性在有限的步骤中结束。确原创 2020-11-12 18:59:35 · 350 阅读 · 0 评论 -
最长上升子序列O(nlogn)处理方式
最长上升子序列给定一长度为n的数列,请在不改变原数列顺序的前提下,从中随机的取出一定数量的整数,并使这些整数构成单调上升序列。 输出这类单调上升序列的最大长度。数据范围:1<=n<=100000n平方的处理方式维护这样一个数组,dp[i]=x,表示已a[i]为结尾的最长上升子序列的长度。当我们已知上升序列的最后一个元素a[i]时,若想知道以它结尾的最长上升序列长度,只需遍历...原创 2020-04-05 15:17:04 · 204 阅读 · 0 评论 -
质数筛-埃氏筛
质数判断我们来看这么一道问题:给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内)N<=10000000,M<=100000首先很容易联想到使用枚举法来确定题目的整体框架for( i: 1~m){ cin>>x; if(x是质数) { yes; }else { ...原创 2020-01-18 14:34:18 · 3565 阅读 · 1 评论 -
排序算法学习之归并排序的思路与实现
归并排序归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。时间复杂度是O(nlogn)核心思想将一段序列分解知道不能再分解的时候,然后开始逐层合并,并在合并的时候保证他们有序,这样就能保证每次合并后的内容有序,知道合并完成保证了所有的部分全部有序。分治三步法:划分问题:把序列分成元素个数尽量相等的两半递归求解:把两半元素分别排序合并问题:把两个...原创 2019-09-04 23:55:55 · 268 阅读 · 0 评论 -
欧几里得算法与拓展欧几里得
欧几里得算(辗转相除法)算法描述设 a>=ba÷b=k⋅⋅⋅⋅⋅⋅ra \div b = k ······ r a÷b=k⋅⋅⋅⋅⋅⋅ra和b的最大公约数等于b和r的最大公约数。gcd(a,b)=gcd(b,a%b),当b为0时,a为(a,b)最大公约数C++实现//递归方式int gcd(int a,int b){ if(b==0) return a;...原创 2019-09-03 10:41:01 · 131 阅读 · 0 评论 -
排序算法学习之快速排序的思路与实现
核心思想先选取一个数字作为基准数,然后进行分类操作,将比基准数小的放到基准数的前两,比基准数大的放到基础数的后面。划分问题:将数组的各个元素重排后分成左右两个部分,使得左边的任意元素都小于或等于右边的任意元素。是按照值进行划分。递归求解:把左右两部分分别排序在快速排序中,算法的主要工作在于划分阶段,而不需要再去合并子问题的解了。它和归并的区别在于,归并需要将两个部分和明后,才能保证...原创 2019-09-05 13:15:09 · 121 阅读 · 0 评论