![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
algorithm
文章平均质量分 81
Enjoy_endless
IIE.UCAS在读,方向CV、AI、Algorithm...;
热爱、积极、努力;
底层、原理、核心
(踏实一些、不要着急,你想要的、岁月都会给你)
展开
-
痛定思痛,开启算法之路(二)
曾经有一个真挚的算法摆在我的面前、我没有珍惜,直到有一天一个非常重要的考试考到了关于它的一个大题,除了心痛之后悔莫及,那就是马上把它彻底搞透(这是我最真实的案例,可能这次考试影响不了我的毅力和决心,但我为他却付出了足够、足够的心血!!)第一章 绪论1.欧几里得求最大公约数: (核心思想:辗转相除) 注意顺序选择:m>n;逐步减小,直到0为止;为什么辗转相除可以得到最大公约数: 首先给定两个数原创 2018-01-03 18:37:20 · 378 阅读 · 0 评论 -
痛定思痛,开启算法之路(三)
之前学的各种具体算法实现感觉实际没有太多的用到,或者说有了实际的问题而却联系不到自己当初学习过的解法, 实际操作的少是很大一方面,在原有知识熟练学习、操作的基础之上,思路、思维得扩展是必可少的; 这不仅仅是见多识广,更在于自己的思考及融汇(还是那句话:慢下来、静下来)第四章 分治法1.归并排序:利用递归,两两归并,逐步扩大合并,最后合为一个: 及快排、折半查找、二叉排序树,这原创 2018-01-03 19:50:41 · 392 阅读 · 0 评论 -
痛定思痛,开启算法之路(一)
读了一篇很好的关于算法的学习成长进阶之路,感受颇深,非常在理;其实自己对于算法方向一直非常肯定,(算法是基础,在我看来基础的东西便是核心)苦于忙忙碌碌,现在也算是可以安下心来,稳扎稳打了;对于每次的学习收货感悟也会随时记录与大家分享。在这我就不黏贴复制原文了,直接 附上原文地址:http://blog.jobbole.com/67348/对于文章里面提到的书籍,根据个人习惯,有需要电子版的,可以原创 2017-12-28 18:45:01 · 364 阅读 · 0 评论 -
痛定思痛,开启算法之路(七)
8.4.1背包问题将不同重量Wi和不同价值Vi的物品放进承重为j的背包中,再背包能装下重量的前提下,求所能装物品的最大价值。 根据动态规划表,可以看出来其时间、空间复杂度均为O(nW);8.4.2记忆功能记忆功能技术试图把自顶向下和自底向上方法的优势结合起来;该方法用自顶向下的方式对给定的问题求解,但还需要维护一个类似自底向上动态规划算法使用的表格。它只对必要的子问题求解原创 2018-01-15 20:57:47 · 322 阅读 · 0 评论 -
痛定思痛,开启算法之路(九)
11.2.3 旅行商问题其优化思想同上,构造状态空间树的过程中尽量消减成本大的分支,其计算下界的方法如下: 11.3 NP困难问题的近似解法对于NP完全问题,我们没有已知的多项式时间的算法,这样的算法是不存在的;对于较小规模的实例,可以使用穷举法或者动态规划等;而分支界限技术有可能在可接受的时间内,对组合最优难题的某些较大实例求解,可是其优良的性能无法保证;还可原创 2018-01-22 18:46:08 · 313 阅读 · 0 评论 -
痛定思痛,开启算法之路(八)
第十章 算法能力的极限 10.4 数值算法的挑战 计算相对误差时,若有x2等于0,则其比值为1,肯定是不行的,所以可以采取如下转换来避免出现减法取消的危险: 第十章主要是一些概念的讲解,在此不再赘述;第十一章 超越算法能力的极限11.1 回溯11.1.1 n皇后问题把n个皇后放在n*n的二维格子上的放法,且满足不同行、不同列和原创 2018-01-22 18:28:27 · 293 阅读 · 0 评论 -
痛定思痛,开启算法之路(六)
7.2串匹配中的输入增强技术模式匹配算法,数据结构中已经很详细的介绍过此算法,在此就不在讨论(有疑问的可以留言);在这里我们学习一种新的算法:7.2.1Horspool算法这个算法相对简单直观多了,移动过程如上图所示,就是直接往后移动模式,移动时分两种情况: 1)模式最后一个元素对应原串的元素存在于模式当中:如上模式长度为6,原串第6个为A,A对应模式中的A距离为4,于是右移模式原创 2018-01-15 19:17:59 · 320 阅读 · 0 评论 -
痛定思痛,开启算法之路(十二)
4.5 合并-查找问题(等价问题)是用间接的数据结构来改善算法性能; 有两种方法可以实现如上目标: 1)利用数组存储每个分组,对于find运算只需访问一下数组即可,而对于union要费时一些; 2)利用记录存储,包括标识和指针,在union时只需改变指针指向即可,几次union之后就成为了树的集合,而对于find取决树的高度; 所以高效的合并-查找算法的思想就是要保原创 2018-02-01 17:30:47 · 414 阅读 · 0 评论 -
痛定思痛,开启算法之路(四)
一隔不觉好几天过去了,有忙的时候、有懒得时候也有很多生活上的因素,总是有那么多不可控因素。 有些算法我理解的也不是十分明确(虽然遇到书上读不明白的地方,也阅读了一些博客及解析,总结的时候尽量做到言简意赅吧),新知识还需反复研究学习才可啊; 欢迎大家相互讨论学习、相得益彰。 抛开杂念、坚定步伐、继续前进!第五章 减治法一个问题给定实例的解和同样问题较小实例的解原创 2018-01-09 19:19:54 · 398 阅读 · 0 评论 -
痛定思痛,开启算法之路(十三)
5.7 在二叉树中计算平衡因子首先对于n=1的基础情况是平凡的: 1)直接的归纳假设:我们已知如何计算节点数小于n的二叉树的全部节点的平衡因子。 对于一棵n>1的树,去掉根节点归纳求解剩下的两棵子树(因为节点的平衡因子只取决于左右子树的高度差),然而虽然我们知道子树(2)更强的归纳假设:已知如何计算节点数小于n的二叉树的全部节点的平衡因子和高度。 有了子树高度原创 2018-02-02 20:12:29 · 373 阅读 · 0 评论 -
痛定思痛,开启算法之路(十)
距离上一篇文章已经一周之久了,项目需要恶补了一下js(笔记还没整理完,后期也发上来);上一本《算法设计与分析基础》第一遍也算是基本完整过完一遍,加上这本《算法引论:一种创造性方法》,还有两周就要过年啦,争取年前完成各一遍(其实从上一本完成当天这一本就已经启动啦);走马观花一遍肯定远远不够,走完这一遍之后先停下来,再回过头去好好吸收、整理、深化;说实话,这本书的前几章走起来确实有些力不从心,先原创 2018-01-29 19:45:03 · 332 阅读 · 0 评论 -
痛定思痛,开启算法之路(十一)
第三章 算法分析第三章虽然没有第二章那么抽象,可是理解起来也没有那么容易,同样需要后续好好整理深化! 3.4 求和 第二种解法其实是一种应用的比较多的,即直观又便于操作:增加或减少项数然后做差,或者是乘除较小系数做差,同样都是消去大部分共同项或者转化出自身形式的倍数;再看实例: 3.5 递推关系 递推从前往后一步一步获得最终结果,对于计算机来说可以循原创 2018-01-29 20:12:53 · 262 阅读 · 0 评论 -
痛定思痛,开启算法之路(十五)
转眼间就要回家过年了,不论是任何原因,最初的计划还是没有完成;回家了,就好好陪陪父母、朋友聚聚吧! 说实话,一年回家一次的话确实也不容易;没有办法,选择了就应该坦然面对、坚持到底!6.9 概率算法 概率算法运行时不仅取决于输入,还与某些随机时间的结果有关; 举一个例子:从数集Xi.......中中选出“前半段”(即大于或等于中数)中的某个数。对于这个问...原创 2018-02-12 16:55:43 · 344 阅读 · 0 评论 -
痛定思痛,开启算法之路(十四)
6.4 排序**这个排版问题也是无力吐槽啊,弄得句不成句、段不像段,奈何寄人篱下,还是言归正传吧!** 基数排序、插入排序(时间复杂度和数据移动次数均为O(n^2))、选择排序(时间O(n^2),移动O(n log n))、归并排序(时间和移动均为(n log n),且须额外空间)、快速排序(平均O(n log n),无需额外空间(但根据初始选择支点的不同以及初始序列顺序的不...原创 2018-02-08 15:27:15 · 286 阅读 · 0 评论 -
GitHub万星ML算法面试大全
不论是为了面试,还是单纯的用来学习了解,都是值得ML相关方向阅读的。项目中,作者为大家准备了 ML 算法工程师面试指南, 它提供了完整的面试知识点、编程题及题解、各科技公司的面试题锦等内容。目前该 GitHub 项目已经有 1 万+的收藏量。如下所示为整个项目的结构,其中从机器学习到数学主要提供的是笔记与面试知识点,读者可回顾整体的知识架构。后面从算法到笔试面经主要提供的是问题及解答方案,...原创 2019-02-22 15:34:35 · 1259 阅读 · 0 评论 -
痛定思痛,开启算法之路(五)
没有最优,只有更优; 算法这个东西,当我们一步步学习、接触的多的时候,会发现永无止境的优化,不得不感叹伟人的智慧光芒、令人回味无穷; 希望我们自己有一天也可以借助巨人的肩膀贡献自己的力量!6.5.1霍纳法则(用于求解多项式的一个算法,是一个很好的改变表现技术的例子) 不断将变量x一层层提出,重内部到外在一层层乘出来;借用一个列表来具体表示上述计算过程:第一行提出系数原创 2018-01-11 18:33:28 · 366 阅读 · 0 评论 -
浅谈程序优化
程序优化,听起来很高大上的东西,其实其原理和底层都是一样的;最好的方法,不是看起来多么纷繁复杂,恰恰相反而是用最简单明了的方式直接快速根本的解决。底层核心原理,听起来就有一种抵触、一种枯燥,然而正是这些才是最根本的东西,浮在表面上的不论如何千变万化,抓住了根本就抓住了牛鼻子。程序优化,从程序上讲无非就那么几个方面:算法、代码、指令;对于每一个方面,多学一点、多看一点,总在不经意的时候就用到了。1转载 2017-11-28 12:06:28 · 471 阅读 · 0 评论 -
顺序表基本操作
//顺序表的基本操作#include<stdio.h>#include<string.h>#define MAXLEN 10typedef struct { //定义节点 char key[10]; char name[10]; int age;}SD;typedef struct{ //节点顺序表 SD Listsd[MA原创 2017-01-09 21:37:50 · 525 阅读 · 0 评论 -
队列的基本操作
#include<stdlib.h> #include<stdio.h> #include<string.h> //引入头文件 #define MAXLEN 20 //宏定义 typedef struct{ //节点定义 char name[10]; int age; }SD; typedef原创 2017-01-11 17:43:20 · 511 阅读 · 0 评论 -
栈的基本操作
#include #include #include //引入头文件 #define MAXLEN 20 //宏定义typedef struct { //节点定义 char name[10]; int age;}SD;typedef struct stack{ //栈定义 SD s原创 2017-01-11 17:53:28 · 376 阅读 · 0 评论 -
sort与qsort对比解析
1.sort函数为c++内置函数:sort(buffer,buffer+n,cmp); buffer为待排序数组的首地址,buffer+n为待排序数组的最后一个数据的地址。cmp为自定义的排序规则函数,sort()函数默认是为升序排列,允许排序类型包括数值/字符/字符串。sort()也可以对结构体进行排序。cmp函数的返回值为true和false或1和0,若为true/1,则sort()函数为升序排原创 2017-02-27 20:02:34 · 500 阅读 · 0 评论 -
MIT Algorithms(算法导论一)
(If you want to be a good programmer,you just programmer every day for two years,you will be an excellent programmer;If you want to be a world-class programmer,you can programmer every day for ten year原创 2017-04-10 18:07:43 · 781 阅读 · 0 评论 -
动态规划(一)
之前面试的时候遇到了几次关于动态规划的题目(1.类似于求两个子串的最大公共子序列;2. 4个人同时完成不同的4个任务所需的最短时间;3.背包问题。。)先来了解一下什么是动态规划:动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。动态规划一般也只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题原创 2017-08-08 16:14:26 · 305 阅读 · 0 评论 -
动态规划(二.LCS)
用动态规划求最长公共子序列其实核心思想很简单,就是分3种情况判断,根据不同情况做相应递归调用即可。如上图3种情况:i,j分别表示字符串1、2的当前相对长度,s[i,j]表示字符串1的前i个字符与字符串2的前j个字符所拥有的最长公共子序列的长度; 第一种情况:很显然当i=0 || j=0时,s[i,j]==0; 第二种:当字符串1、2的第i、j个字符相等时,则c[i,j]的长度直接为s[i-1,j原创 2017-08-09 15:02:47 · 325 阅读 · 0 评论 -
动态规划(三.LCS)
上一篇文章对于动态规划的学习以及算法实现均没有问题,在这里再补充一点,可能之前没有表述的更加清晰,在此借鉴一位博客文章在此简述一下:第一步依旧是递推关系式的推导,根据关系逻辑编写代码打印出标记二维数组如图: 构造出此图之后,对于他的构造子串的输出,是按倒序一步步从后往前查找过去的,如图箭头所示;也正如程序中所描述的分别为i-1,j-1一步步到0为止。在这里还有一种计算方法,虽然费时耗力但是也原创 2017-08-11 11:52:46 · 392 阅读 · 0 评论 -
排序(一)
1.冒泡排序void BubbleSort(ElemType a[],int n){ for(i=0;i<n-1;i++){ flag=false; //交换标志 for(j=n-1;j>i;j--) if(a[j-1].key<a[j].key){ swap(a[j-1],a[j]);原创 2017-08-14 15:05:15 · 312 阅读 · 0 评论 -
排序(二)
3.插入排序1)直插void InsertSort(){ int i,j; for(i=1;i<n;i++) //将后面元素依次向前比较插入 if(a[i].key>a[i-1].key){ a[0]=a[i]; for(j=i-1;a[0].key>a[j].key;j--) a[j+1]=a[j]; /原创 2017-08-14 15:07:07 · 243 阅读 · 0 评论 -
算法面试(一)
之前面试的时候,遇到了许多关于基本算法的题目,对于其代码的编写以及特殊情况下的优化及改进等,及算法相关的学习有了更多的感悟与领会,与大家分享一下,此处以快排讲解为例;快排的核心思想很简单:就是先选择一个杠杆元素(一般选第一个数),对剩下元素遍历,大的放右边,小的放左边;然后对于两边元素再次用以上方法进行递归处理;基本的代码实现在我的以前博客(排序二)中已经介绍过了,此处借鉴一个简洁代码:// v为原创 2017-08-14 17:08:20 · 341 阅读 · 0 评论 -
应用密码学(学习整理、一)
如果你的新的密码系统的强度依赖于攻击者不知道算法的内部机理,你注定会失败。最好的算法是那些已经公开的,并经过世界上最好的密码分析家们多年的攻击,但还是不能破译的算法;第一章:基础知识明文用 M(消息)或 P(明文)表示,它可能是比特流(文本文件、位图、数字化的语 音流或数字化的视频图像)。加密函数E 作用于 M 得到 密文 C,用数学表示为: E(M)=C. 相反地,解密函数D 作用于 C 产原创 2017-09-12 19:04:28 · 2046 阅读 · 0 评论 -
算法(一文详解贪心)
这两年,什么东西最火,无疑是人工智能,各种学校、课程、公司甚至培训机构趋之若鹜,这种行为并不是说不好,但是当人们全都涌进来的时候,其真正的市场、真正的落地、真正的价值、真正的需求,逼迫一浪接一浪的人们,必须去思考、必须去正视:你究竟学到了什么,你拥有什么样的核心价值,这些到底能为你带来什么。2019年,随着大批的人工智能‘专家’涌入劳动市场,当十几个人去竞争一个岗位的时候,你的竞争力是什么,或...原创 2019-09-25 18:59:45 · 415 阅读 · 0 评论