E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
算法导论笔记
算法的奥秘:种类、特性及应用详解(
算法导论笔记
1)
算法,是计算机科学领域的灵魂,是解决问题的重要工具。在算法的世界里,有着各种各样的种类和特性。今天,我将带各位踏上一段探索算法种类的旅程,分享一些常见的算法种类,并给出相应的实践和案例分析。希望通过本文的介绍,能够帮助您更好地理解和应用这些算法,提高解决问题的能力。请您抽出宝贵的时间,与我一同探索这个充满魅力和挑战的算法世界。什么是算法在《算法导论》中,算法被定义为任何良定义的计算过程,该过程取某
五行缺你94
·
2023-11-25 00:29
算法
笔记
算法的奥秘:常见的六种算法(
算法导论笔记
2)
算法的奥秘:种类、特性及应用详解(
算法导论笔记
1)上期总结算法的种类和大致介绍,这一期主要讲常见的六种算法详解以及演示。排序算法:排序算法是一类用于对一组数据元素进行排序的算法。
五行缺你94
·
2023-11-25 00:24
算法
笔记
排序算法
数据结构
java
算法导论笔记
4:散列数 hash
一了解一些散列的基本概念,仅从文字角度,整理了最基础的定义。发现一本书,《算法图解》,微信读书APP可读,有图,并且是科普性质的读物,用的比喻很生活化,可以与《算法导论》合并起来看,会轻松很多。P142散列数hashtable槽slot对应全域中一个关键字两个关键字映射到同一个槽里:冲突散列,本质就是把任意长度的输入通过散列算法变成固定长度的输入,你可以理解为它是一种压缩性的映射,所以散列值的空间
danxutj
·
2023-11-12 16:48
FPGA
算法
算法
笔记
哈希算法
算法导论笔记
5:贪心算法
P216第15章动态规划最优子结构具有它可能意味着适合应用贪心策略动态规划(DynamicProgramming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法。剪切-粘贴技术证明每个子问题的解就是它本身的最优解(利用反证法)保持子问题空间尽可能简单P217在第16章介绍贪心算法,它与动态规划有很多相似之处,最大的不同在于贪心算法不是首先寻找子问题的最优解,然后在其
danxutj
·
2023-11-12 16:48
FPGA
算法
算法
笔记
贪心算法
算法导论笔记
:桶排序 线性时间完成
P1128.4桶排序总能线性时间完成桶排序概念:桶排序(BucketSort)又称箱排序,是一种比较常用的排序算法。其算法原理是将数组分到有限数量的桶里,再对每个桶分别排好序(可以是递归使用桶排序,也可以是使用其他排序算法将每个桶分别排好序),最后一次将每个桶中排好序的数输出。假设目前有包含100,200,300,400,500,600共6个数字的一个随机顺序的集合。我们需要对这个集合进行桶排序。
danxutj
·
2023-10-06 05:30
算法
算法
笔记
数据结构
算法导论笔记
读算法导论记录一下读算法导论的过程1.算法如果问我什么是算法(思考中)利用数据结构,考虑时间以及空间效率,高效的解决一系列数学或是计算机问题的方法而书中:算法(algorithm)就是任何良定义的计算过程,该过程取某个值或值的集合作为输出并产生某个值或值的集合作为输出。这样算法就是把输入转换成输出的计算步骤的一个序列。算法解决哪些问题书中举例了DNA序列的储存以及分析(30亿个化学基对的序列)互联
虞_18bd
·
2023-01-27 18:26
【
算法导论笔记
】第二章 算法基础(上)
前言学习《算法导论》第三版(机械工业出版社),分享一些个人所得以及记录一些笔记,若有错误还请不吝指正,谢谢!本章节通过分析插入排序,引入《算法导论》中设计和分析算法的一个框架,分上下两篇博文,一天一篇比较轻松2.1插入排序插入排序通常适用于少量元素的排序,大体上为将一个混乱无序的数组序列或其他序列,每一次将一个数与已排好序的其他数比较后放在其正确的位置。例如(加粗字体为已排好序的数):初始状态:a
疼疼蛇
·
2021-02-05 22:07
算法导论笔记
算法
排序算法
数据结构
算法导论
插入排序
算法导论笔记
算法和数据结构算法和数据结构算法函数的增长渐近记号Theta记号O记号Omega记号o记号omega记号标准记号与常用函数单调性向上取整和向下取整模运算多项式多项式对数阶乘多重函数多重对数函数菲波那切数线性查找问题排序插入排序归并排序选择排序分治策略最大子数组问题暴力求解分治方法线性非分治方法矩阵乘法的Strassen算法算法函数的增长渐近记号用来描述算法渐近运行时间的记号,根据定义域为自然数集N
wxainn
·
2020-09-16 06:23
算法和数据结构
算法
数据结构
算法导论
笔记
算法导论笔记
:21用于不相交集合的数据结构
在某些应用中,要将n个不同的元素分成一组不相交的集合。不相交集合上有两个重要操作,即找出给定的元素所属的集合和合并两个集合。一:不相交集合的操作不相交集合教据结构维护一组不相交的动态集合的集合S={S1,S2,...,SK}。每个集合通过一个代表来识别,代表是集合中的某个成员,在某些应用中,哪一个成员被选作代表是无所谓的,但是必须保证在两次寻找某一集合的代表两次,得到的答案应该是相同的。在另一些应
weixin_30772261
·
2020-09-14 04:46
算法导论笔记
:02基本排序查找算法
1:插入排序:类似于扑克牌,为了将一张牌插入正确的位置,从右向左将它与已在手中的每张牌进行比较,这样,拿在手上的牌就总是排序好的。分析该算法的时间复杂度:求和:因此,最好运行时间为:可以把运行时间表示为an+b。因此这是n的线性函数。最差运行时间为:把该最坏情况运行时间表示为an^2+bn+c,因此,它是n的二次函数。所以,插入排序的时间复杂度为Ө(n^2)。2:选择排序:首先找出A中的最小元素并
weixin_30827565
·
2020-09-12 14:33
算法导论笔记
:08线性排序
之前的排序算法都是比较排序:在排序的最终结果中,各元素的次序依赖于他们之间的比较。任何比较排序在最坏情况下,都要经历Ω(nlgn)次比较,所以,归并排序和堆排序都是渐进最优的。除了比较排序之外,还有其他的排序方法,但是都必须满足一定的前提条件,这些排序算法的下界不再是Ω(nlgn),而可以达到线性的下界。1:决策树模型比较排序可以抽象成一颗决策树,他表示在给定的输入规模的情况下,某一特定排序算法对
weixin_30787531
·
2020-09-12 14:01
算法导论笔记
:06堆排序
满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点(也可以这样理解,除叶子节点外的所有结点均有两个子结点。节点数达到最大值。所有叶子结点必须在同一层上)1:堆排序的时间复杂度为O(nlgn)。具有空间原址性的特点,也就是任意时刻只需常数个额外元素空间存储临时数据。2:堆是一颗近似完全二叉树:除了最底层外,该树是完全充满的,最底层是从左向右填充的。3:堆可以用数组存储,对于元素下标
weixin_30536513
·
2020-09-12 14:54
算法导论笔记
:22基本图算法
本章阐述图的表示方法和图的搜索方法。图的搜索指的是系统化的沿着图的边访问所有顶点。图的搜索算法可以用来发现图的结构。许多图的算法在开始时,都是通过搜索获取图结构信息。另外还有一些图的算法实际上是由基本的图搜索算法经过简单扩充而成的。因此。图的搜索技术是图算法领域的核心。一:图的表示对于图G=(V,E),可以有两种表示方法:邻接链表和邻接矩阵。两种表示方法既可以表示无向图,也可以表示有向图。邻接链表
weixin_30235225
·
2020-09-12 14:17
数据结构与算法
MIT
算法导论笔记
(第一节课)
写在前面最近想复习一下算法与数据结构的知识,正好准备看看MIT的算法导论这门课。第一节课讲述一个问题peakfinding主要内容问题1:在一个一维的数组当中找到一个极大值,这个极大值的定义就是大于等于两边元素的值就是极大值,两端的值只要大于其有值的那一边的元素就算是极大值。这算是一个抛砖引玉的题目,最简单额思路就是遍历整个数组,一个元素一个元素的检查是否满足。时间复杂度为o(n)。优化解也比较容
zhc_24
·
2020-09-12 12:06
算法
算法导论笔记
:07快速排序
1:快速排序快速排序的最坏情况时间复杂度为Θ(n^2)。虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能很好。它的期望运行时间复杂度为Θ(nlgn),而且Θ(nlgn)中蕴含的常数因子非常小,而且它还是原址排序的。2:基本思想快速排序采用分治法进行排序,首先在数组中选择一个元素P,根据元素P将数组划分为两个子数组,在元素P左侧的子数组的所有元素都小于或等于该
weixin_30498921
·
2020-09-12 12:05
MIT
算法导论笔记
详细MIT
算法导论笔记
(网络链接)第一讲:课程简介及算法分析(Sheridan)第二讲:渐近符号、递归及解法(Sheridan)第三讲:分治法(1)(Sheridan)第四讲:快排及随机化算法(Sheridan
weixin_30258027
·
2020-09-12 12:53
算法导论笔记
:24单源最短路径
最短路径问题:一个带权重的有向图G=(V,E)和权重函数w:E->R,该权重函数将每条边映射到实数值的权重上。一条路径p的权重w(p)是构成该路径的所有边的权重之和,定义从节点u到结点v的最短路径权重δ(u,v)如下:在实际应用中,可以用一张图表示道路交通图,结点代表城市,边代表城市之间的道路,边上的权重代表道路的长度。目标就是找出一条从城市A到城市B的最短路径,边上的权重还可以表示时间、费用、罚
weixin_30287169
·
2020-09-12 01:48
【
算法导论笔记
】所有结点对的最短路径问题
基于矩阵乘法的动态规划算法求解所有最短路径EXTEND_SHORTEST_PATHS(L,W)n=L.rowsletL'=l'(i,j)beanewn*nmatrixfori=1tonforj=1tonl'(i,j)=∞returnL'SLOW-ALL-PATHS-SHORTEST-PATHS(W)n=W.rowsL[1]=Wform=2ton-1letL[m]beanewn*nmatrixL[m
jimye
·
2020-09-12 00:09
数据结构与算法
算法导论笔记
:25所有节点对的最短路径问题
本章考虑在给定的有向加权图G=(V,E),对于所有的节点u,v∈V,找到一条从节点u到节点v的最短路径。希望以表格的形式表示输出:第u行第v列给出的是节点u到节点v的最短路径权重。对于这个问题,如果是运行|V|次单源最短路径算法来解决所有节点对的最短路径问题,每一次使用一个不同的节点做为源节点。如果所有边的权值是非负的,可以采用Dijkstra算法。如果采用数组来实现最小优先队列,算法的运行时间为
weixin_30653023
·
2020-08-26 15:08
算法导论笔记
——水桶排序(基数排序)
这次是计数排序的升级版,若是计数排序还没有搞懂,先去看看我的前一篇。计数排序是用空间换时间的算法,若k太大,它的效率会下降很快,而且会消耗很多内存,所以通常是在重复的元素很多,且跳跃不太大的情况下使用。废话不多先上代码:importmathdefbucketsort(A,maxValue):#采用二进制分组,比10进制分组更精确#step1得到maxValue的二进制位数nstr=bin(maxV
失控的Tierra
·
2020-08-24 05:40
算法
python
算法导论笔记
:16贪心算法
动态规划方法求解最优化问题时,每个步骤都面临多种选择。对于许多最优化问题,使用动态规划算法来求解最优解有些杀鸡用牛刀了,可以使用更简单更高效的贪心算法。贪心算法在每一步的选择中,都选择当时最佳的情况。即局部最优的选择。贪心算法并不能保证总能得到最优解,但是很多问题确实可以求得最优解。一:活动选择问题多个活动调度竞争共享资源,目标是选出一个最大的互相兼容的活动集合。假设有一个n个活动组成的集合S={
weixin_30439067
·
2020-08-18 04:20
算法导论笔记
——最大子数组C语言实现
第四章分治策略在分治策略中我们将递归的求解一个问题,在每层递归中有如下三个步骤。分解将问题划分为一些子问题,子问题形式与原问题一样,只是规模更小。解决递归的求解出子问题。如果子问题规模足够小,则停止递归,直接求解。合并将子问题的解合并为原问题的解。需要递归求解时,我们称之为递归情况,当子问题足够小时,不需要递归时,我们称之为递归已经触底,进入基本情况。递归式一个递归式就是一个不等式或等式,通过更小
jazrynwong
·
2020-08-17 08:46
C
算法导论笔记
ch4_分治策略_最大连续子数组之和
求解递归式的方法:1.带入法:猜想一个界,然后用数学归纳法证明这个界是正确的(看到这顿时感觉回到了中学笔推的时代);2.递归树法:将递归转换为一颗树,其节点表示不同层次的调用产生的代价,然后用边界和技术来求解递归式;3.主方法:可求解如下公式递归式的界:T(n)=aT(n/b)+f(n),这里刻划了一个分治算法:生成a个子问题,每个问题的规模是原有规模的1/b,分解和合并花费的时间为f(n).例子
whowhoha
·
2020-08-17 04:08
算法导论
c/c++/数据结构
算法导论笔记
(四)
第七章快速排序对于包含n个数的输入数组来说,快速排序是一种最坏情况复杂度为。虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能非常好,期望时间复杂度时,另外还他们进行原址排序(需要的内存空间小)。该算法的思想是:对于数组A,选择一个主元r,并围绕它将数组划分为两个子数组,一个数组全部小于r,另一个数组全部大于r。递归的重复以上步骤,当划分子数组只包含一个元素时
luoning12
·
2020-08-16 19:01
算法导论笔记
——第十五章 动态规划
更多博客,请访问我的个人网站点此访问一、概念部分第一部分比较抽象,建议先大体上浏览一下,有个初步印象,等熟悉第二部分的具体的例题之后,回过头再仔细总结这一部分。1.1动态规划法思想首先说明一点,动态规划(dynamicprogramming)中的programming指的是一种表格法,而不是编程的意思。动态规划法的思想妙就妙在这个“表格”上。根据动态规划思想,要求解一个问题,先求解它的子问题,然后
化简
·
2020-08-16 06:15
算法
单源最短路径的基本算法 --
算法导论笔记
通用的Bellman-Ford:特点:能处理存在负权边的情况,并能判断是否存在负权回路。可以用在差分约束系统问题的求解,有解情况下最短路径是一组可行解。效率低,O(VE)。过程:做顶点数(V)-1次对所有边的松弛操作,也可以加一个flag检查到没有需要松弛的时候便结束,快一点。再检查一遍是否有边还能做松弛操作(把松弛操作比较部分反过来做判断条件),若能则说明有负权回路。注:负权回路很多时候能代表存
伯德
·
2020-07-14 23:35
图论
Algorithms基础问题
[
算法导论笔记
]--所有结点对的最短路径问题
本文所贴示的伪代码均来源《算法导论》,本文只是对其中《所有结点对的最短路径问题》章节的简单总结,许多数学证明过程已忽略。对于给定有向图G=(V,E)理论上,我们可以使用|V|次单源最短路径算法来解决所有结点对之间的最短路径问。但除此之外,我们可以利用动态规划来解决此问题(因为一条最短路径的子结构也包含了最短路径).一、基础解法最短路径的结构:对于有向图G=(V,E)的所有结点对的最短路径问题,可以
Alfheim_Cy
·
2020-07-14 17:55
算法
[
算法导论笔记
]建立二叉堆
二叉堆是基于数组的数据结构,由在数组上定义的left()right()parent()操作,以及heapsize属性,可以把它视为二叉树。如图,根节点有两个叶子结点,分别对应的数组下标为1和2,通过left()和right()操作实现(下标位移再加偏移),而叶子结点的父节点通过parent()操作实现。由于此时的heapsize是3,因此数组中下标为3的第四个元素并没有加入堆中。二叉堆分为最大堆和
君浪
·
2020-07-05 16:41
算法
算法导论笔记
(二) : 优先级队列
1堆与优先级队列堆排序是一个不错的原地排序算法.但是一个实现较好的快速排序会优于堆排序。但是堆数据结构有一个非常重要的用处,就是作为高效的优先级队列.与堆一样优先级队列也有两种:最大优先级队列和最小优先级队列.2优先级队列及其操作优先级队列是一种用来维护由一组元素构成的集合S的数据结构.这一组元素的每一个都有一个关键字Key.一个最大优先级队列支持以下操作:(i)INSERT(S,x):把元素x插
方橙
·
2020-06-30 04:32
算法导论
算法导论笔记
(五) :基数排序与C++实现
1基数排序介绍基数排序是一种用在老式穿卡机上的算法。该算法在对每一位数进行排序的时候需要是稳定的:在该为相同的数的相对顺序不会变.因此可以使用上节的计数排序作为其子程序.下边演示一个基数排序的过程:2基数排序的过程计数排序的过程很简单。即从最低位到最高位的每一位进行计数排序.3算法实现#ifndef__RADIXSORT_H__#define__RADIXSORT_H__#include#incl
方橙
·
2020-06-30 04:32
算法导论
算法导论笔记
(四) : 计数排序
1计数排序概述计数排序假设待排序数组中每一个元素都是0到k间的一个整数.如果k=O(n),则计数排序运行的时间为O(n).2计数排序执行过程(i)填充辅助数组C(C的长度为K),数组A中的每一个元素都在C的对应位置加1.(ii)对C进行计算使得C[i]=C[i]+C[i-1](iii)从后向前遍历A数组,根据该元素的值找到C中对应位置的数。将该数字作为索引将当前元素填到结果数组B中.(iv)C中对
方橙
·
2020-06-30 04:32
算法导论
算法导论笔记
(六) :桶排序及其C++实现
1桶排序简介与计数排序类似,桶排序也是对输入数据做了某种假设.因此运行的很快.桶排序假设输入数据由一个随机过程产生.该过程将元素随机而独立的分布在[0,1)区间.2桶排序过程(i)将[0,1)区间划分为n个大小相同的区间(桶)(ii)将各元素放入对应的桶中.(iii)对每个桶里的元素进行排序(vi)一次列出各个桶里的元素下边是桶排序的一个实例:3完整代码#ifndef__BUCKETSORT_H_
方橙
·
2020-06-30 04:32
算法导论
算法导论笔记
(三) : 快速排序
1快速排序简介快速排序的最坏情况的运行时间为O(n^2),虽然这个最坏情况运行时间比较差。但快速排序通常是用于排序的最佳的实用选择.这是因为其平均性能相当好.期望的运行时间为O(nlgn)并且隐含的常数因子比较小.并且快速排序是就地排序.2快速排序过程快速排序基于以下分治模式:(i)分解:数组A[p,r]被划分为两个子数组A[p,q-1](所有元素小于A[q])和A[q+1,r](所有元素大于A[
方橙
·
2020-06-30 04:32
算法导论
【
算法导论笔记
】最大连续子序列和
分别采用两种方法实现:分而治之递归解法线性数学解法1.分而治之递归解法分为三种情况,最大子序列和完全在左子数组;最大子序列和完全在右子数组;跨越了中间;关键代码/*通过初始化值,完美规避,必须包含mid的子序列*/intfindMaxCrossingSubArray(int*A,intlow,intmid,inthigh){intleftIndex=mid;intrightIndex=mid;in
寻隐者不遇2016
·
2020-06-23 12:11
算法导论笔记
算法总结
例如一些常见的概念,都会因题目而异,切不可直接跳过熟悉概念的解释,否则极易出错2)不同的题目会重新定义已经熟悉的概念,甚至是完全不同;原则应该是:如果题目定义,则严格按照题目要求做题;而如果没有重新定义的概念,应该以
算法导论笔记
中的内容为主
jiayuqicz
·
2019-03-17 11:58
算法导论学习
《
算法导论笔记
》——十分钟带你了解二叉搜索树(BST)!
注:本文为《算法导论》中二叉树相关内容的笔记。对此感兴趣的读者还望支持原作者。搜索树数据结构支持许多动态集合操作,包括SEARCH(查找指定结点)、MINIMUM(最小关键字结点)、MAXMUM(最大关键字结点)、PREDECESSOR(结点的先驱)、SUCCESSOR(结点的后继)、INSERT(结点的插入)和DELETE(结点的删除)等。因此,我们使用一棵搜索树既可以作为一个字典又可以作为一个
lost-person
·
2018-07-27 20:46
算法导论
编程
算法
算法导论笔记
——第十~十一章 数据结构(一) 散列
第十章基本数据结构栈:可由数组表示队列:可由数组表示指针和对象:可由多数组表示。可用栈表示freelist有根数:二叉树:左右孩子分支无限制:左孩子右兄弟表示法第十一章散列表数组:为每个元素保留一个位置散列表:用于实际存储关键字比全部可能关键字少很多时,比如字典操作解决散列冲突:链接法,开放寻址法11.2散列表用链表法,在简单均匀散列的假设下,一次成功或不成功的查找所需要的平均时间为Θ(1+α),
weixin_34029949
·
2017-08-16 18:00
数据结构与算法
算法导论笔记
动态规划DP详解-钢条切割的分析与实现
DP和分治的相似都是通过组合子问题的解来求解原问题。DP中的“programming”指的是一种表格法,而非coding。DP和分治的不同分治步骤:(例如归并排序)将问题划分为互不相交的子问题递归地求解子问题组合子问题的解,求出原问题的解对于DP:应用于子问题重叠的情况,即不同的子问题具有公共的子子问题(子问题的求解是递归进行的,将其划分为更小的子子问题)这种情况下分治会做很多不必要的工作,会反复
proheart
·
2017-03-17 00:00
算法
java
算法导论笔记
第一章
首先从别人的博文中看到一个对算法的最为简单而又简洁的理解: 算法=输入+良好的计算过程+正确输出。 仔细想,就是这个样子的。 有时间,习惯了有问题就上网查找,而渐渐使大脑变的迟钝许多,遇到问题第一反应不是仔细想想而是想要去查查怎么回事,这不是个好的习惯。要改正。 下面是自己对习题的一些想法: 1.1-1:给出一个真实世界的例子,其中包含着下列的某种计算问题:排序,确定多矩
·
2015-11-13 12:56
算法导论
算法导论笔记
(四)算法分析常用符号
♨ {\color{Blue} f\left ( n \right )= \Theta \left ( g\left ( n \right ) \right )} LaTeX 存在正常数、和,使任意,有。 其实是一个集合:。只是通常也写成标题那样而已。 ♨ 存在正常数和,使任意,有。 强于,即。 ♨
·
2015-11-11 01:35
算法导论
算法导论笔记
(三)冒泡排序
冒泡排序 重复走访要排序的数列,比较相邻两个元素,如果顺序错误就交换,直到该数列无需再交换为止。 升序冒泡 void BubbleSorting(int arr[], int len) { if (len < 1) throw "Param is wrong. Length is not correct.";
·
2015-11-11 01:34
冒泡排序
算法导论笔记
(一) 插入排序
插入排序: 插入排序属于原地排序(sorted in place),使用的是增量(incremental)方法。 排序从第二个元素开始遍历。在排好序的子数组A[1 .. j -1]中,将元素A[j]插入,形成排好序的子数组A[1 .. j];然后,重复此操作,直到整个数组有序。 使用for循环实现的升序插入排序: void insertion_sort_asc(int
·
2015-11-11 01:33
插入排序
算法导论笔记
(二)二路归并排序
二路归并排序 归并排序采用了一种”分而治之“的策略:将原问题分解成N个规模较小而结构与原问题相似的子问题;递归求解这些子问题,然后合并其结果,从而得到原问题的解。 分治模式一般遵循以下三个步骤: 分解(Divide):将原问题分解成若干子问题; 解决(Conquer):递归地求解各子问题。若子问题足够小,则直接求解; 合并(Combine):将子问题的解合并成原问题的
·
2015-11-11 01:33
归并排序
算法导论笔记
:32字符串匹配算法
在编辑文本程序中,经常需要在文本中找到某个模式的所有出现位置。典型的情况是:在一个文本文件中,搜索用户输入的关键字。解决这种问题的算法叫做字符串匹配算法。字符串匹配算法的形式化定义如下:假设文本是长度为n的数组T[1..n],而模式是一个长度为m的数组P[1..m],其中m=|y|,那么yx;如果|x|=|y|,那么x=y。 一:朴素字符串匹配算法 朴素字符串匹配算法是通过一个循
gqtcgq
·
2015-05-11 21:00
算法导论笔记
:31数论算法
因为我们将处理一些大整数,所以需要调整一下如何看待输人规模和基本算术运算的代价的看法。 在本章中,一个“大的输入”意味着输入包含“大的整数”,而不是输人中包含“许多整数”。因此,我们将根据输入数的位数来衡最输人的规模,而不是仅根据输人中包含的整数的个数。在本章中,我们在分析算法时一般既考虑算术运算的次数,也考虑它们所要求的位操作的次数。 一:初等数论概念 一个整数能被另
gqtcgq
·
2015-05-11 21:00
算法导论笔记
:25所有节点对的最短路径问题
本章考虑在给定的有向加权图G=(V,E),对于所有的节点u,v∈V,找到一条从节点u到节点v的最短路径。希望以表格的形式表示输出:第u行第v列给出的是节点u到节点v的最短路径权重。 对于这个问题,如果是运行|V|次单源最短路径算法来解决所有节点对的最短路径问题,每一次使用一个不同的节点做为源节点。如果所有边的权值是非负的,可以采用Dijkstra算法。如果采用数组来实现最小优先队
gqtcgq
·
2015-05-10 16:00
算法导论笔记
:24单源最短路径
最短路径问题:一个带权重的有向图G=(V,E)和权重函数w:E->R,该权重函数将每条边映射到实数值的权重上。一条路径p的权重w(p)是构成该路径的所有边的权重之和,定义从节点u到结点v的最短路径权重δ (u,v)如下: 在实际应用中,可以用一张图表示道路交通图,结点代表城市,边代表城市之间的道路,边上的权重代表道路的长度。目标就是找出一条从城市A到城市B的最短路径,边上的权重还
gqtcgq
·
2015-05-10 10:00
算法导论笔记
:23最小生成树
一个连通无向图G=(V, E),每条边(u,v)∈E,都有权重w(u,v),希望找到一个无环子集TE,既能够将所有节点都连接起来,又具有最小的权重。由于T是无环的,并且能连接所有的节点,所以T必然是一棵树,成T为最小生成树。最小生成树不唯一。 一:最小生成树的形成 本章所讨论的两种算法都采用贪心策略,这个贪心策略由下面的通用算法描述: GENERIC-MST(G,w)
gqtcgq
·
2015-05-10 09:00
算法导论笔记
:22基本图算法
本章阐述图的表示方法和图的搜索方法。图的搜索指的是系统化的沿着图的边访问所有顶点。图的搜索算法可以用来发现图的结构。许多图的算法在开始时,都是通过搜索获取图结构信息。另外还有一些图的算法实际上是由基本的图搜索算法经过简单扩充而成的。因此。图的搜索技术是图算法领域的核心。 一:图的表示 对于图G=(V,E),可以有两种表示方法:邻接链表和邻接矩阵。两种表示方法既可以表示无向
gqtcgq
·
2015-05-10 08:00
算法导论笔记
:21用于不相交集合的数据结构
在某些应用中,要将n个不同的元素分成一组不相交的集合。不相交集合上有两个重要操作,即找出给定的元素所属的集合和合并两个集合。 一:不相交集合的操作 不相交集合教据结构维护一组不相交的动态集合的集合S={S1,S2,...,SK}。每个集合通过一个代表来识别,代表是集合中的某个成员,在某些应用中,哪一个成员被选作代表是无所谓的,但是必须保证在两次寻找某一集合的代表两次,得
gqtcgq
·
2015-05-09 16:00
上一页
1
2
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他