算法

算法之美-工程、应用、实战

拟墨画扇 提交于 2020-02-03 00:08:49
算法之美-工程、应用、实战 网盘地址: https://pan.baidu.com/s/1dGMC2M04-464w9juBGVwXA 提取码:lf0h 对于同一个问题,我们可能会用不同的算法来求解,我们可以根据算法的可读性、效率等进行取舍。 针对不同的数据保存方式,也会有不同的算法。 很多同学会觉得,我工作经验五年,工作游刃有余,基本上遇不到什么解决不了的问题,你前面讲了那么多算法,算法真的有用吗,我在工作中貌似从来都没有遇到呀!这么想的同学,一定要注意,可能此时你已经遇到了程序员的天花板,业务代码写的再多其实对你来说已经没有什么提高了。 当你35岁的时候,你会发现自己真的到了焦虑的时候了,你会觉得自己跟二十来岁毕业几年的小伙伴相比较,并没有什么优势嘛!人家还年轻、薪资也低、能加班、愿意吃苦。 程序员,应该做到自己的不可替代,从哪里做呢?就要从这些底层的,貌似没什么用的地方下功夫。 算法和数据结构是整个计算机语言的核心。平时你只是在使用别人开发好的框架来写代码,那你有没有想过,这些框架是如何被编写出来的呢?甚至于说,你用Python,用Java,用Go,用JS编程,那这些语言又是谁编写出来执行你写的代码的呢?这些语言的元语言又是什么? 其实,一切问题的核心,就是算法和数据结构在中间起作用。学好了,写一个自己的解释器玩玩不是很牛逼? 从本章节开始

2020-02算法刷题集

前提是你 提交于 2020-02-02 22:48:09
(0201)-(救生艇) 第 i 个人的体重为 people[i] ,每艘船可以承载的最大重量为 limit 。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit 。 返回载到每一个人所需的最小船数。(保证每个人都能被船载)。 注意:1≤people.length≤50000,1≤people[i]≤limit≤30000 题目来源:领扣LintCode—1061救生艇 解题思路:可以见 2020-01算法刷题集 ,参考题目 0113巨人排队 和 0131会议室Ⅱ 的处理流程 将所有人按照体重进行降序排列,遍历列表,实现将每一个人按照顺序进入救生艇的过程 首先创建一个救生艇列表,将救生艇的最大载重量减去当前救生艇的承重量,为剩余的载重量 当剩余载重量满足下一个人进入时,则重复以上动作 当剩余的载重量不满足下一个人进入时,则将救生艇的最大载重量减去当前救生艇的承重量再次探入救生艇列表中 列表的长度即是最少船数。 程序代码: #0202.py-救生艇 def findindex(list): for i in range(len(list)): if(list[i]==1): return i return -1 def trueorfalse(ele,list): tf_list = [0 for i in range(len(list))] for i in

VIO的关键点与难点

淺唱寂寞╮ 提交于 2020-02-02 19:08:37
文章目录 一、算法后端部分 二、算法前端部分 三、硬件部分 四、参考文献 为了更充分的理解和应用VIO,对其关键点与难点的把握是必要的。一般来说,难点与关键点是阻碍一个项目实施的重要因素,如果攻克了难点与关键点,其他知识串在一起就是一个工作量的事情了。总体来说,VIO的难点可以分为:硬件部分,算法前端部分,算法后端部分。 一、算法后端部分 二、算法前端部分 三、硬件部分 四、参考文献 https://zhuanlan.zhihu.com/p/70155698 来源: CSDN 作者: wang_jun_whu 链接: https://blog.csdn.net/wang_jun_whu/article/details/104146126

数据结构学习(一)

孤街醉人 提交于 2020-02-02 18:22:26
数据结构:数据的存储方式,specially,复杂的数据要关注数据元素之间的关系用合适的方式来存储。 数据结构大致分类:线性表(顺序表、链表、栈、队列),树结构(普通树、二叉树、线索二叉树),图结构。 线性表结构存储的数据往往是可以依次排列的。线性表并不是一种具体的存储结构,它包含顺序存储结构和链式存储结构,是顺序表和链表的统称。 顺序表结构的底层实现借助的就是数组。可简单理解成数组。需要提前申请一定大小的存储空间,这块存储空间的物理地址是连续的。 * 链表则完全不同,使用链表存储数据时,是随用随申请,因此数据的存储位置是相互分离的,换句话说,数据的存储位置是随机的。为了给各个数据块建立“依次排列”的关系,链表给各数据块增设一个指针,每个数据块的指针都指向下一个数据块(最后一个数据块的指针指向 NULL)组成单元由指针和数据块两部分组成。 栈和队列是特殊的线性表,栈元素遵循先入后出的原则,在栈的同一端进行。队列则是先进先出原则,在队里两段进行。 数存储结构具有一对多的特点。 图存储结构具有多对多的特点。 算法是解决某个问题的想法、思路;而程序是在心中有算法的前提下编写出来的可以运行的代码。 算法好的标准:首先,能准确解决问题。其次,能在多种情况下不崩溃。最后,时间效率和空间效率高。 算法的时间复杂度,主要看算法中使用到的循环结构中代码循环的次数(称为“频度”)。次数越少

算法与数据结构一:基本概念

a 夏天 提交于 2020-02-02 10:51:31
程序 = 数据结构 + 算法 一、算法的五个特性 算法(algorithm)是解决特定问题求解步骤的描述,在计算机中表现为有限的操作序列。 输入(Input):算法必须有输入量,用以刻画算法的初始条件(特殊情况也可以没有输入量,这时算法本身定义了初始状态); 输出(Output):算法应有一个或以上输出量,输出量是算法计算的结果。没有输出的算法毫无意义。 明确性(Definiteness):算法的描述必须无歧义,以保证算法的实际执行结果是精确地匹配要求或期望,通常要求实际运行结果是确定的。 有限性(Finiteness):算法必须在有限个步骤内完成任务。 有效性(Effectiveness):算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现(又称可行性)。 二、数据结构 指相互之间存在一种或多种特定关系的数据元素的集合用计算机存储、组织数据的方式。数据结构分别为逻辑结构、(存储)物理结构和数据的运算三个部分。 2.1 逻辑结构 逻辑结构(logical structure) 是指在数据中数据元素之间的相互关系。数据元素之间存在不同的逻辑关系构成了以下4种结构类型。 (1)集合结构:集合的数据元素没有其他关系,仅仅是因为他们挤在一个被称作“集合”的盒子里。 (2)线性结构:线性的数据元素结构关系是一对一的,并且是一种先后的次序,就像a-b-c-d-e-f-g····

常用的库函数

时光毁灭记忆、已成空白 提交于 2020-02-02 07:08:35
①find()函数 1.通用std::find 函数 std::find函数的确有很好的通用性,但是也有很大的缺点,就是算法的效率不高,算法的复杂度为O(n)。 2.特定容器的find 函数 当数据量是百万或者千万级的时候,std::find的O(n)算法就让程序感到销魂了。 这时候我们可以考虑使用map或者set的算法。是的,这里的find,是map和set的一个成员函数,map和set中的find算法是用红黑树来实现的。黑红树有良好的最坏情况运行时间,算法复杂度为O(logn)。 ②string中常用的函数 字符串函数应用在有一年的天梯赛某题中有很大的作用 估值一亿的AI核心代码 ③ isdight()、isalpha()、isalnum() isdight():判断一个字符是否为数字 isalpha():判断一个字符是否为字母 isalnum():判断一个字符是否为数字或字母 来源: CSDN 作者: RenWeitao 链接: https://blog.csdn.net/RenWeitao/article/details/104134473

java实现选择排序算法

给你一囗甜甜゛ 提交于 2020-02-02 04:54:13
/* * Selecting Sort */ public class Sort { public static void main ( String [ ] args ) { int [ ] a = { 32 , 18 , 20 , 58 , 10 } ; int min = 0 , temp = 0 , index = 0 , i ; for ( i = 0 ; i < a . length - 1 ; i ++ ) { min = a [ i ] ; temp = a [ i ] ; for ( int j = i + 1 ; j < a . length ; j ++ ) { if ( a [ j ] < min ) { min = a [ j ] ; index = j ; } } if ( min != temp ) { a [ i ] = min ; a [ index ] = temp ; } } for ( i = 0 ; i < a . length ; i ++ ) System . out . print ( a [ i ] + " " ) ; } } 运行结果如下(时间复杂度为O(n²)): 10 18 20 32 58 选择排序算法的详细介绍可以看下这篇博客 添加链接描述 来源: CSDN 作者: Legolas~ 链接: https://blog

机器学习——鸢尾花实例(附数据集资源)

我们两清 提交于 2020-02-02 01:22:44
# 这个项目是针对鸢尾花(Iris Flower)进行分类的一个项目,数据集是含鸢尾花的三个亚属的分类信息 # 通过机器学习算法生成一个模型,自动分类新数据到这个三个亚属的某一个中 # 该数据集的特点: # 1.所有特征数据都是数字,不考虑如何导入和处理数据 # 2.这是一个分类问题,可以很方便地通过有监督地通过有监督学习算法来解决问题 # 3.这是一个多分类问题,也许需要一些特殊处理 # 4.所有的特征的数值采用相同的单位,不需要进行尺度的转换 # 导入类库 from pandas import read_csv from pandas.plotting import scatter_matrix from matplotlib import pyplot from sklearn.model_selection import train_test_split from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.metrics import classification_report from sklearn.metrics import confusion_matrix from sklearn.metrics

可视化图布局算法简介

无人久伴 提交于 2020-02-02 01:13:05
Fruchterman Reingold (FR) FR算法将所有的结点看做是电子,每个结点收到两个力的作用: 其他结点的库伦力(斥力) f a ( d ) = d 2 k f_{a}(d)=\frac{d^{2}}{k} f a ​ ( d ) = k d 2 ​ 边对点的胡克力(引力)。 f r ( d ) = − k 2 d f_{r}(d)=\frac{-k^{2}}{d} f r ​ ( d ) = d − k 2 ​ 该算法遵循两个简单的原则:有边连接的节点应该互相靠近;节点间不能离得太近。FR算法建立在粒子物理理论的基础上,将图中的节点模拟成原子,通过模拟原子间的力场来计算节点间的位置关系。算法通过考虑原子间引力和斥力的互相作用,计算得到节点的速度和加速度。依照类似原子或者行星的运动规律,系统最终进入一种动态平衡状态。 OpenOrd OpenOrd是一个面向大规模图布局的开源算法,来自论文OpenOrd:An Open-Source Toolbox for Large Graph Layout 这是一种力-导向的布局算法,专门用于处理非常大的图结构 左边(a)显示的是瑞士卷Swiss roll数据集,由瑞士卷副本manifold随机抽取的2万个点组成19,30。 中间(b)显示的是一个由使用VxOrd的20个最近的邻居 这种算法从瑞士卷中获得的力-导向布局。

【Python数据结构与算法笔记day28】6.3. 插入排序

我的未来我决定 提交于 2020-02-02 00:28:49
文章目录 6.3. 插入排序 插入排序 插入排序分析 时间复杂度 插入排序演示 6.3. 插入排序 插入排序 插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 插入排序分析 def insert_sort ( alist ) : # 从第二个位置,即下标为1的元素开始向前插入 for i in range ( 1 , len ( alist ) ) : # 从第i个元素开始向前比较,如果小于前一个元素,交换位置 for j in range ( i , 0 , - 1 ) : if alist [ j ] < alist [ j - 1 ] : alist [ j ] , alist [ j - 1 ] = alist [ j - 1 ] , alist [ j ] alist = [ 54 , 26 , 93 , 17 , 77 , 31 , 44 , 55 , 20 ] insert_sort ( alist ) print ( alist ) 时间复杂度 最优时间复杂度:O(n) (升序排列,序列已经处于升序状态) 最坏时间复杂度:O(n2) 稳定性:稳定