几种常用的数据结构构有哪几种

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
数据结构中几种存储结构的比较
下载积分:999
内容提示:数据结构中几种存储结构的比较
文档格式:PDF|
浏览次数:542|
上传日期: 15:42:09|
文档星级:
该用户还上传了这些文档
数据结构中几种存储结构的比较
官方公共微信常见的几种最优化方法_算法与数据结构_传送门
常见的几种最优化方法
算法与数据结构
作者:Poll的笔记 来源:/maybe2030/ 链接:/maybe2030/p/4751804.html阅读目录1、梯度下降法(Gradient Descent)2、牛顿法和拟牛顿法(Newton's method & Quasi-Newton Methods)3、共轭梯度法(Conjugate Gradient)4、启发式优化方法我们每个人都会在我们的生活或者工作中遇到各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题“在一定成本下,如何使利润最大化”等。最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优的一些学科的总称。随着学习的深入,博主越来越发现最优化方法的重要性,学习和工作中遇到的大多问题都可以建模成一种最优化模型进行求解,比如我们现在学习的机器学习算法,大部分的机器学习算法的本质都是建立优化模型,通过最优化方法对目标函数(或损失函数)进行优化,从而训练出最好的模型。常见的最优化方法有梯度下降法、牛顿法和拟牛顿法、共轭梯度法等等。1、梯度下降法(Gradient Descent)梯度下降法是最早最简单,也是最为常用的最优化方法。梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解。一般情况下,其解不保证是全局最优解,梯度下降法的速度也未必是最快的。梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是”最速下降法“。最速下降法越接近目标值,步长越小,前进越慢。梯度下降法的搜索迭代示意图如下图所示:牛顿法的缺点:(1)靠近极小值时收敛速度减慢,如下图所示;(2)直线搜索时可能会产生一些问题;(3)可能会“之字形”地下降。从上图可以看出,梯度下降法在接近最优解的区域收敛速度明显变慢,利用梯度下降法求解需要很多次的迭代。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。比如对一个线性回归(Linear Logistics)模型,假设下面的h(x)是要拟合的函数,J(theta)为损失函数,theta是参数,要迭代求解的值,theta求解出来了那最终要拟合的函数h(theta)就出来了。其中m是训练集的样本个数,n是特征的个数。1)批量梯度下降法(Batch Gradient Descent,BGD)(1)将J(theta)对theta求偏导,得到每个theta对应的的梯度:(2)由于是要最小化风险函数,所以按每个参数theta的梯度负方向,来更新每个theta:(3)从上面公式可以注意到,它得到的是一个全局最优解,但是每迭代一步,都要用到训练集所有的数据,如果m很大,那么可想而知这种方法的迭代速度会相当的慢。所以,这就引入了另外一种方法——随机梯度下降。对于批量梯度下降法,样本个数m,x为n维向量,一次迭代需要把m个样本全部带入计算,迭代一次计算量为m*n2。2)随机梯度下降(Random Gradient Descent,RGD)(1)上面的风险函数可以写成如下这种形式,损失函数对应的是训练集中每个样本的粒度,而上面批量梯度下降对应的是所有的训练样本:(2)每个样本的损失函数,对theta求偏导得到对应梯度,来更新theta:(3)随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。随机梯度下降每次迭代只使用一个样本,迭代一次计算量为n2,当样本个数m很大的时候,随机梯度下降迭代一次的速度要远高于批量梯度下降方法。两者的关系可以这样理解:随机梯度下降方法以损失很小的一部分精确度和增加一定数量的迭代次数为代价,换取了总体的优化效率的提升。增加的迭代次数远远小于样本的数量。对批量梯度下降法和随机梯度下降法的总结:批量梯度下降---最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小,但是对于大规模样本问题效率低下。随机梯度下降---最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近,适用于大规模训练样本情况。2、牛顿法和拟牛顿法(Newton's method & Quasi-Newton Methods)1)牛顿法(Newton's method)牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数f (x)的泰勒级数的前面几项来寻找方程f (x) = 0的根。牛顿法最大的特点就在于它的收敛速度很快。具体步骤:首先,选择一个接近函数 f (x)零点的 x0,计算相应的 f (x0) 和切线斜率f
' (x0)(这里f ' 表示函数 f
的导数)。然后我们计算穿过点(x0,
(x0)) 并且斜率为f '(x0)的直线和 x 轴的交点的x坐标,也就是求如下方程的解:我们将新求得的点的 x 坐标命名为x1,通常x1会比x0更接近方程f
(x) = 0的解。因此我们现在可以利用x1开始下一轮迭代。迭代公式可化简为如下所示:已经证明,如果f
' 是连续的,并且待求的零点x是孤立的,那么在零点x周围存在一个区域,只要初始值x0位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果f
' (x)不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。由于牛顿法是基于当前位置的切线来确定下一次的位置,所以牛顿法又被很形象地称为是"切线法"。牛顿法的搜索路径(二维情况)如下图所示:牛顿法搜索动态示例图:关于牛顿法和梯度下降法的效率对比:从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。)根据wiki上的解释,从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。注:红色的牛顿法的迭代路径,绿色的是梯度下降法的迭代路径。牛顿法的优缺点总结:优点:二阶收敛,收敛速度快;缺点:牛顿法是一种迭代算法,每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。2)拟牛顿法(Quasi-Newton Methods)拟牛顿法是求解非线性优化问题最有效的方法之一,于20世纪50年代由美国Argonne国家实验室的物理学家W.C.Davidon所提出来。Davidon设计的这种算法在当时看来是非线性优化领域最具创造性的发明之一。不久R. Fletcher和M. J. D. Powell证实了这种新的算法远比其他方法快速和可靠,使得非线性优化这门学科在一夜之间突飞猛进。拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。拟牛顿法和最速下降法一样只要求每一步迭代时知道目标函数的梯度。通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性。这类方法大大优于最速下降法,尤其对于困难的问题。另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法更为有效。如今,优化软件中包含了大量的拟牛顿算法用来解决无约束,约束,和大规模的优化问题。具体步骤:拟牛顿法的基本思想如下。首先构造目标函数在当前迭代xk的二次模型:这里Bk是一个对称正定矩阵,于是我们取这个二次模型的最优解作为搜索方向,并且得到新的迭代点:其中我们要求步长ak 满足Wolfe条件。这样的迭代与牛顿法类似,区别就在于用近似的Hesse矩阵Bk 代替真实的Hesse矩阵。所以拟牛顿法最关键的地方就是每一步迭代中矩阵Bk的更新。现在假设得到一个新的迭代xk+1,并得到一个新的二次模型:我们尽可能地利用上一步的信息来选取Bk。具体地,我们要求 从而得到这个公式被称为割线方程。常用的拟牛顿法有DFP算法和BFGS算法。3、共轭梯度法(Conjugate Gradient)共轭梯度法是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。 在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。下图为共轭梯度法和梯度下降法搜索最优解的路径对比示意图: 注:绿色为梯度下降法,红色代表共轭梯度法4、启发式优化方法启发式方法指人在解决问题时所采取的一种根据经验规则进行发现的方法。其特点是在解决问题时,利用过去的经验,选择已经行之有效的方法,而不是系统地、以确定的步骤去寻求答案。启发式优化方法种类繁多,包括经典的模拟退火方法、遗传算法、蚁群算法以及粒子群算法等等。还有一种特殊的优化算法被称之多目标优化算法,它主要针对同时优化多个目标(两个及两个以上)的优化问题,这方面比较经典的算法有NSGAII算法、MOEA/D算法以及人工免疫算法等。●本文编号168,以后想阅读这篇文章直接输入168即可。●输入m可以获取到文章目录。今日微信公号推荐↓↓↓ 更多推荐请看《》涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。传播计算机学习经验、推荐计算机优秀资源:点击前往《》点击阅读原文,了解野狗
觉得不错,分享给更多人看到
算法与数据结构 微信二维码
分享这篇文章
6月24日 23:10
算法与数据结构 最新文章
算法与数据结构 热门文章Redis中5种数据结构的使用场景介绍
投稿:junjie
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Redis中5种数据结构的使用场景介绍,本文对Redis中的5种数据类型String、Hash、List、Set、Sorted Set做了讲解,需要的朋友可以参考下
一、redis 数据结构使用场景
原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码。目前目标是吃透 redis 的数据结构。我们都知道,在 redis 中一共有5种数据结构,那每种数据结构的使用场景都是什么呢?
String——字符串
Hash——字典
List——列表
Set——集合
Sorted Set——有序集合
下面我们就来简单说明一下它们各自的使用场景:
1. String——字符串
String 数据结构是简单的 key-value 类型,value 不仅可以是 String,也可以是数字(当数字类型用 Long 可以表示的时候encoding 就是整型,其他都存储在 sdshdr 当做字符串)。使用 Strings 类型,可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受 Redis 的定时持久化(可以选择 RDB 模式或者 AOF 模式),操作日志及 Replication 等功能。除了提供与 Memcached 一样的 get、set、incr、decr 等操作外,Redis 还提供了下面一些操作:
1.LEN niushuai:O(1)获取字符串长度
2.APPEND niushuai redis:往字符串 append 内容,而且采用智能分配内存(每次2倍)
3.设置和获取字符串的某一段内容
4.设置及获取字符串的某一位(bit)
5.批量设置一系列字符串的内容
6.原子计数器
7.GETSET 命令的妙用,请于清空旧值的同时设置一个新值,配合原子计数器使用
2. Hash——字典
在 Memcached 中,我们经常将一些结构化的信息打包成 hashmap,在客户端序列化后存储为一个字符串的值(一般是 JSON 格式),比如用户的昵称、年龄、性别、积分等。这时候在需要修改其中某一项时,通常需要将字符串(JSON)取出来,然后进行反序列化,修改某一项的值,再序列化成字符串(JSON)存储回去。简单修改一个属性就干这么多事情,消耗必定是很大的,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而 Redis 的 Hash 结构可以使你像在数据库中 Update 一个属性一样只修改某一项属性值。
存储、读取、修改用户属性
3. List——列表
List 说白了就是链表(redis 使用双端链表实现的 List),相信学过数据结构知识的人都应该能理解其结构。使用 List 结构,我们可以轻松地实现最新消息排行等功能(比如新浪微博的 TimeLine )。List 的另一个应用就是消息队列,可以利用 List 的 *PUSH 操作,将任务存在 List 中,然后工作线程再用 POP 操作将任务取出进行执行。Redis 还提供了操作 List 中某一段元素的 API,你可以直接查询,删除 List 中某一段的元素。
1.微博 TimeLine
2.消息队列
4. Set——集合
Set 就是一个集合,集合的概念就是一堆不重复值的组合。利用 Redis 提供的 Set 数据结构,可以存储一些集合性的数据。比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。因为 Redis 非常人性化的为集合提供了求交集、并集、差集等操作,那么就可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。
1.共同好友、二度好友
2.利用唯一性,可以统计访问网站的所有独立 IP
3.好友推荐的时候,根据 tag 求交集,大于某个 threshold 就可以推荐
5. Sorted Set——有序集合
和Sets相比,Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,比如一个存储全班同学成绩的 Sorted Sets,其集合 value 可以是同学的学号,而 score 就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。另外还可以用 Sorted Sets 来做带权重的队列,比如普通消息的 score 为1,重要消息的 score 为2,然后工作线程可以选择按 score 的倒序来获取工作任务。让重要的任务优先执行。
1.带有权重的元素,比如一个游戏的用户得分排行榜
2.比较复杂的数据结构,一般用到的场景不算太多
二、redis 其他功能使用场景
1. 订阅-发布系统
Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在 Redis 中,你可以设定对某一个 key 值进行消息发布及消息订阅,当一个 key 值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能。
2. 事务——Transactions
谁说 NoSQL 都不支持事务,虽然 Redis 的 Transactions 提供的并不是严格的 ACID 的事务(比如一串用 EXEC 提交执行的命令,在执行中服务器宕机,那么会有一部分命令执行了,剩下的没执行),但是这个 Transactions 还是提供了基本的命令打包执行的功能(在服务器不出问题的情况下,可以保证一连串的命令是顺序在一起执行的,中间有会有其它客户端命令插进来执行)。Redis 还提供了一个 Watch 功能,你可以对一个 key 进行 Watch,然后再执行 Transactions,在这过程中,如果这个 Watched 的值进行了修改,那么这个 Transactions 会发现并拒绝执行。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具查看: 3205|回复: 12
请问数据结构有哪些比较好的习题书啊?
主题帖子积分
王道论坛初级道友, 积分 129, 距离下一级还需 71 积分
王道论坛初级道友, 积分 129, 距离下一级还需 71 积分
考研年份2013
报考学校东南大学
本科学校中国地质大学(武汉)
数据结构看完了,想找点题目练习练习,要那种有比较详细答案解析的那种,有哪些习题书比较好呢?(我看的课本是:数据结构——使用C语言(第四版)朱站立编著)
主题帖子积分
考研年份2012
报考学校哈工程
本科学校河南师大
看王道单科吧,上面有题
主题帖子积分
王道论坛初级道友, 积分 129, 距离下一级还需 71 积分
王道论坛初级道友, 积分 129, 距离下一级还需 71 积分
考研年份2013
报考学校东南大学
本科学校中国地质大学(武汉)
& & 王道单科正式版不是还木有出来么?要是看12年的,那不是到时候和13年有很多重复的么?
主题帖子积分
考研年份2012
报考学校哈工程
本科学校河南师大
肯定会有重复,今年的已经开始印了
主题帖子积分
王道论坛初级道友, 积分 129, 距离下一级还需 71 积分
王道论坛初级道友, 积分 129, 距离下一级还需 71 积分
考研年份2013
报考学校东南大学
本科学校中国地质大学(武汉)
嗯嗯,等正式发行还要段时间吧,不知道什么时候网上能正式开售?
主题帖子积分
考研年份2008
报考学校Nil
本科学校Nil
& & 一周左右之后哈,没多久了。。。
<font color="#ff年王道码农训练营开班时间表及定金链接:
主题帖子积分
考研年份2013
报考学校哈尔滨工业大学
本科学校江西科技师范学院
& &期待啊风华哥~~~
主题帖子积分
王道论坛初级道友, 积分 147, 距离下一级还需 53 积分
王道论坛初级道友, 积分 147, 距离下一级还需 53 积分
考研年份2012
报考学校北京航空航天大学
本科学校合肥工大
主题帖子积分
考研年份2012
报考学校华中科大
本科学校中南林业科大
1800题吧,红色的那本。虽然题量超多,前期就做选择题吧,把做错的都搞懂,后面做王道单科书会很轻松。
主题帖子积分
王道论坛初级道友, 积分 129, 距离下一级还需 71 积分
王道论坛初级道友, 积分 129, 距离下一级还需 71 积分
考研年份2013
报考学校东南大学
本科学校中国地质大学(武汉)
& & 风华哥,一个星期之后的是王道的单科正式版么?试读版与以后的正式版有什么区别啊?还有一个星期之后是能在淘宝上买到么?因为我没有预定。。。
主题帖子积分
王道论坛初级道友, 积分 129, 距离下一级还需 71 积分
王道论坛初级道友, 积分 129, 距离下一级还需 71 积分
考研年份2013
报考学校东南大学
本科学校中国地质大学(武汉)
& & 嗯,现在是纠结是买1800还是2012的王道单科,如果王道2013的单科能在一个星期之后开始网上销售,那就前两本就没必要买啦
主题帖子积分
考研年份2008
报考学校Nil
本科学校Nil
& & 1800题上的好点的题单科上基本都有的。
今年考研当然是13版的。内容增加了一些,不仅是去年大纲新增的。
也修正了去年发现的全部错误。等等
估计再过1周多就差不多能单独购买了。
<font color="#ff年王道码农训练营开班时间表及定金链接:
主题帖子积分
王道论坛初级道友, 积分 129, 距离下一级还需 71 积分
王道论坛初级道友, 积分 129, 距离下一级还需 71 积分
考研年份2013
报考学校东南大学
本科学校中国地质大学(武汉)
& & 嗯嗯,期待中。。。
|||王道论坛

我要回帖

更多关于 常用的数据结构和算法 的文章

 

随机推荐