精华内容
下载资源
问答
  • 在看knuth老爷子ACP,第一小节中数学定义让我很疑惑。 算法可以表示为 ( Q, I , ...最后给出了一组有限制公式,如下 f((deita, j)) = (deita, a(j)) if theta(j) does not occur in deita; f((dei


    在看knuth老爷子的ACP,第一小节中数学定义让我很疑惑。


    算法可以表示为 ( Q,  I , omiga, f ),  然后一段长长的explain & analyses


    最后给出了一组有限制的公式,如下


    f((deita, j)) = (deita, a(j))   if theta(j) does not occur in deita;


    f((deita,j)) = (a*theta(j)*omiga, b(j))    if a is the softest, possible string for which deita = a*theta(j)*omiga,  (其实就是上面的eles的情况)

    f((deita, N)) = (deita, N)



    这段公式的含义到底是想说明一个什么问题呢?(请理解我不想费劲的把那一坨公式标准的贴上来)

    难道就是为了说明,对于 0 <= j < N, 每一种执行可能有两种情况,输入变化,和没有变化?

    对于N,就是结果。


    难道这是这个公式想说明的问题么?谁能帮忙分析和解答一下呢?

    展开全文
  • 常用算法定义

    2020-04-18 21:47:09
    1. stable matching: 稳定匹配(给出N男N女偏好列表) 如果匹配后剩余元素间不存在不稳定对优于当前匹配结果,那么是稳定匹配;如果存在不稳定对,那么是不稳定匹配 1962年Gale-shapley算法-追求拒绝算法,...

    1. stable matching: 稳定匹配(给出N男N女的偏好列表)

    如果匹配后剩余的元素间不存在不稳定对优于当前匹配结果,那么是稳定匹配;如果存在不稳定对,那么是不稳定匹配

    1962年Gale-shapley算法-追求拒绝算法,找到稳定匹配:

    a. 初始化S -匹配表为空

    b. while(存在某个m没有匹配,且没有追求过所有女人的时候)(循环)

    c. 找到m还没有追求过的偏好最高的女人w, 如果w没有匹配,则将配对m-w加入s; 否则如果w喜欢m优于当前的配偶m', 将m'-w移出匹配表,并添加m-w对到匹配表; 否则w拒绝m的追求

    d. 直到所有男人找到配偶,循环终止

    e. 返回稳定匹配S

    证明算法有限不终止:

    a. 男人按偏好从高到低 b. 女人匹配后不会恢复单身 每次迭代每个男人追求的女人不一样,最多N的平方次

    反证法:证明所有的男人和女人都有匹配

    反证法:匹配是稳定的。如果A-Z不稳定,假设2种情况:1. A没追求过Z,那么匹配表中的Z的配偶要优于A,所以A-Z是稳定的,与如果矛盾。  2. A追求过Z, 那么匹配表中Z的配偶优于A并拒绝A,所以A-Z是稳定的,与如果矛盾。

     

    本来存在多种稳定匹配结果

    G-S算法总是男性最优的分配,也是一个稳定匹配;女性最差分配,但女人会通过撒谎(附加假的条件作用于匹配过程)得到更好的配偶

     

    2. 算法的时间复杂度定义及分析

    对理想算法的期望:当输入加倍时,算法的运行时间只增加常数倍,多项式时间算法(低常系数和低幂次,也有例外使用高常系数以及高幂次,以及指数时间算法,因为最坏输入情况很少出现)。

    使用最坏情形分析。

    f(n)是T(n)的上界,T(n) = O(f(n)); f(n)是T(n)的下界, T(n) = Ω(f(n)).  分为多项式函数,对数函数,指数函数

    运行时间:O(n) 输入的常数倍   举例:a.找出数组中的最大值 b. 合并两个已排序的数组

                       O(n(logn): 分治算法;归并排序,堆排序;最大间隔问题(求一系列到达时间的最大间隔,先将到达时间排序,然后从前到后扫描时间间隔,并记录最大时间间隔);  logN = e; e的平方为N, 比如log100 = 10. 10是100的平方根。 还有求最大公约数,幂运算,折半查找都是logN的时间复杂度。https://www.cnblogs.com/xtuxiongda/p/8777168.html

                      O(n平方): 枚举所有的元素对。给出一组点的x,y坐标,找到最接近的一对点。但实际上有O(n(logn))的算法

                       step 1: min = (x1,y1)到(x2,y2)的距离

                       step 2: 从 i = 1到 n

                                       从 j = i + 1 到n

                                           d = (xi - xj)² + (yi - yj)²

                                           if (d < min) min = d;

                       O(n三次方): 枚举所有的三元组。集合不想交问题。给出n个集合,判断是否有集合对是不相交的。

                        for each set Si

                            for each other set Sj

                               for element p of Si

                                    判断p是否也属于Sj

                               如果Si中的元素没有一个属于Sj,那么返回Si和Sj是不相交的

                         O(指数时间): 独立集. 得到图中的最大独立集。 独立集是图中节点的子集,任意两个节点没有边相连。

                          枚举图的所有子集为2的n次方个, 然后检查子集中任意两点间是否右边相连,需要O(n二次方)

     

    3. 图

     无向图:G=(V,E)  V是顶点集,E是边集, 表达结点间的关系               

    应用:交通(结点为路口,边为路)

               计算机网络(结点为计算机,边为连接线路)

                www网络(结点表示网页,边表示网页间的链接关系)            

                社会(结点表示人,边表示关系)

                软件系统(结点表示函数,边表示调用)

                 调度系统(结点表示任务,边表示先决约束)

    图的表示方法:1. 邻接矩阵(n x n), 每条边被表示了2次。空间为n的平方 2.邻接表,是结点索引数组的列表,空间为m + n

    一条简单路径,所有结点不一样;一个连通的无向图,每两个结点之间都存在路径;圈,路径多于2个结点 v1 = vk, v1到vk-1都不一样

    一个连通的无向图且没有圈,有n-1条边,满足3个条件中的2个,它就是一棵树。可以从某个结点作为根向外展开为一棵树。

    图的遍历:

    a. 两个结点S,T的连通性问题

    b. S,T的最短路径问题

    广度优先算法:从s开始向所有可能的方向探索,每次增加一层,后面一层的元素不出现前之前的所有层中,并且所有元素都有一条边与前一层的某个元素相连接。

    如果图由邻接表给出,BFS的时间复杂度为O(m+n)

    应用:二部图,结点可为红色或蓝色,每条边都有一个红点和蓝点。用于处理匹配问题,独立集问题。

    二部图特性:1. 不包括奇数个点的圈 2.

    连通分支:从某个结点可达的所有结点集合

     

    有向图:边是有方向的。网络图是有向图的实例。网络搜索引擎使用有向图。             

    问题:

    a.可达性问题。 找到给定结点s的所有可达结点

    b. s-t最短路径的长度问题

    应用:网络爬虫,找出从s开始可达的所有网页

    强连通的图:每一对结点都是互相可达的。也就是对任意结点s出发可以到达每一个结点,并且每个结点也可以到达s。

    BFS算法在O(m+n)时间判断G是否强连通。对于G和G(reverse),从任意结点S开始运行BFS,所有结点可达,那么G是强连通的。

     

    有向无圈图:进行拓扑排序

    如果G有一个拓扑排序,那么G是一个有向无圈图。

    如果G是一个有向无圈图,那么G一定有无入边的结点。

    拓扑排序算法O(m+n):找到没有入边的结点V(没有入边的队列S),从S中删掉V以及从它出发的边(将入边减为0的结点加入S),递归计算G-V的拓扑排序,并把后面的排序结点添加到V之后。

     

    贪婪算法

    1. 找零问题:用最少数量的硬币支付指定金额,每一步使用当前可支付的最大硬币

    过程:

    将所有可支付的硬币排序

    支付硬币的集合S为空

    如果要支付的金额x > 0(循环)

        k为当前不超过x的最大面值的硬币,如果不存在k,返回无解

        否则,使用k支付, x = x - k,将k加入集合S

    最后返回S

    贪婪算法对美国收银系统有效,但对邮政系统无效(面值导致)

     

    2. 区间排序

    2个任务相容是因为它们的起止时间没有重叠

    目标:找出最大相容任务的集合

    解决方案:(哪个最优)

    a. 最早开始时间优先算法。 将任务按照开始时间排序

    b. 最早结束时间优先算法。 将任务按照结束时间排序  --- 最优

    按任务结束时间从小到达排序  O(n(logn)

    A为要加工的任务集合

    j从1到n(循环)

        如果j与A中的任务兼容,将j加入集合A

    返回A

    c. 最小区间优先算法。按起止时间长度升序排列。

    d. 最小冲突优先算法。每个任务与其他任务冲突的数目排序。

     

    3. 区间划分

    用最少的教室来安排讲座,讲座的时间对教室的使用不冲突

    深度:所有时刻中包含某个时刻的区间最多的数量,所需教室的数量>=区间的深度

    将讲座按开始时间升序排列

    d为当前分配的教室数目

    依次把讲座安排在某个相容的教室中,如果没有相容教室,就开辟一个新的教室

    for j 1 to n (循环)

        如果j与某个教室相容,就把讲座安排在这个教室

        否则,分配一个新的教室d+1, 将j安排在新教室

     

    4. 最小延迟问题

    一个生产设备,在一个时刻只能处理一个任务,job j要使用Tj时间完成,并且要在Dj前完成;如果开始时间为Sj, 那么完成时间为Fj = Sj + Tj. 延迟时间为 max(0, Fj - Dj)

    目标:对所有任务排序,使得任务的最大延迟时间最小

    方案:

    按加工时间升序排列

    按交工时间升序排序  -- 最优

    t = 0

    for j 1 to n

        在每个任务的结束时间安排下一个任务的加工

        sj = t; Fj = t + Tj

        t = t + Tj

    返回[s1, f1]... [Sn, Fn]

    按交工时间-加工时间升序排列

     

    5. 最优缓存

    缓存的容量是k,有m个元素要求依次到达,d1...dm. 如果某个元素已在缓存中,称为缓存命中,否则要剔除某个元素,加入要访问的元素。

    目标:制定更新缓存的计划,使得更新缓存的次数最少

    方案:

    剔除缓存中下一次访问最远的元素

    离线版本:事先知道序列,使用FF算法是最优的

    在线版本:利用已发生的信息 LIFO 剔除最近被加入的元素是K-competitive, LRU,剔除上次访问最早的元素,arbitrarily bad.

     

    6. 图的最短路径:

    Dijkstra算法

    S是探索过的结点集

    结点集中的每个结点,保存距离d(u)

    初始化S包含s起点,并且d(s) = 0

    当S != V (循环)

        对于不在S中的每个结点v,考虑所有指向它的边,并且另一个结点u属于S,计算d(u)+Le(u到v的距离)的最小值,将v加入S,并记录d(v) =min(d(u)+Le) 

    返回S

     

    7. 最小生成树

    给定一个连通图G = (V,E),每条边的权重为Ce, 包含所有结点并且总权重最小的树,为Minimum Spanning Tree

    应用:电话,电视,电路设计

    基于贪婪策略的2中算法

    a. Kruskal算法

    T是空集,将权重边按升序排列,对于T中的边,当前边与T中的边不形成圈,则将当前边将入T,否则考虑下一条边

    b.Prim算法

    从任意某个根结点s出发, 贪婪地生成树T,每一步从恰好有一个端点属于T的边中选取权重最小的边加入T

    圈:是一条首位相连的路径,而且中间结点没有重复,也可以当做一组首尾相连的边集合

    割: 割是S的一个结点子集,所有恰好有一个端点在S中的边构成的集合,称为S对应的割集。

    圈和割集的交集一定有偶数条边。

     

    割最优性质:S是一个结点子集,恰有一个端点属于S的边中,费用最小的边,最小生成树一定包含这边

    圈最优性质:C是任意一个圈,f是圈中最长的边,则最小生成树一定不包含这边

     

    8. 聚类问题:

    K聚类问题:把对象分为K个非空的类,并且使类之间的间隔最大

    聚类函数要求:1. pi,pj距离为0, pi= pj 2. pi和pj的距离>=0 3. pi,pj的距离=pj,pi的距离

    类的距离:来自不同类的两个点之间的最小距离

    基于贪婪策略的k聚类算法:

    对象对应为图中的点,每个点是一个类,得到n个类

    寻找来自不同类的最近两个点,并且把他们连接起来,类的数目减少一个,重复这个过程直到恰好有k个类(n-k次)

    结果相当于最小生成树删掉k-1条费用最大的边得到的结果

     

    分治算法

    将问题分为几个部分

    递归的求解每个部分

    将各部分解组合为最终解 (合并时间是线性的)

    时间复杂度 nlogn

     

    排序问题:

    给定n个元素,按照某个顺序排序

    数据有序时会简单(中位数,最近点对问题)

     

    1. 常用的归并排序: 将数组分为2部分;对每个部分进行排序;合并2个部分的排序结果到新队列(o(n))

     

    2. 逆序数计算:分为2个大小相等的序列,计算各自的逆序数,再计算两部分之间的逆序数,得到总逆序数

    两部分之间逆序数计算:假设两部分都是排序的,然后计算来自不同部分的逆序关系,同时把2个有序的部分合并为有序的整体

    伪代码:前提:A和B都是排序的,最后的输出L也时排序的

        step1: 如果L只有一个元素,那么返回逆序数为0,和L

         否则,将L分为2个序列A,B,分别递归调用算法,得到逆序数RA,RB,并对2个序列进行排序,然后调用合并算法把A,B合并为有序序列,并计算两部分之间的逆序数RAB。

        最后:整个逆序数为RA+RB+RAB,以及合并后的序列

    强力搜索:逐一检查每两个数是否逆序,O(n²)

     

    3. 最近点对

    找到一组点中距离最近的两个点

    直线L将平面分为2部分(每部分包含相同数目的点),递归调用算法分别求出左右两部分的最近点对,得到两者间的最小值,以及分别位于两部分的最近点对(只保留L两边最小值宽的点,删除其他店,用y坐标排序,对每一个点,计算它与之后11个点的距离,找到最小值,比较是否更新最小值),最后得出最近点对。

     

    4. 整数乘法

     

    5. 矩阵乘法

    展开全文
  • 写出Floyd算法的伪代码和给出距离矩阵(顶点之间的最短距离矩阵) 2.解析 面对上面这幅图,我们要做的是求出个顶点之间的最短距离。那么首先我们要做的讲就是将上面这幅图转化为一个二维矩阵,定义一个顶点到它自身...

    1.问题

    用Floyd算法求解下图各个顶点的最短距离。写出Floyd算法的伪代码和给出距离矩阵(顶点之间的最短距离矩阵)

    2.解析

    面对上面这幅图,我们要做的是求出个顶点之间的最短距离。那么首先我们要做的讲就是将上面这幅图转化为一个二维矩阵,定义一个顶点到它自身的距离为0,如果两个顶点之间没有直接相邻的路线,则定义为无穷大。那么根据定义我们可以由上面那幅图得出下面这个二维矩阵。
    在这里插入图片描述

    根据生活经验,如果我们没有直接过去的路,我们可以选择经过一个点绕过去,这也就是Floyd算法的核心思想,就那上面那幅图来说,对于点2来说,没有直接去点1的路,那么他就可以选择经过点3、点4来间接到达点1。那么因为我们要求的是最短路,所以我们就要对绕点3的距离和绕点4的距离相比较,在这题中,点3到点1的距离是7,点2到点3的距离是3,所以绕路过去的距离是10。同样的,绕4过去的距离是无穷+5仍是无穷。相比之下点3的距离就小很多,所以对这个矩阵中点2到点1原来的距离无穷进行更新,更新为10。
    以上便是一个点的更新的方式,只要用这种方式对矩阵中的每一个值进行更新就可以得到它的距离矩阵。

    3.设计

    for (k = 1; k <= n; k++) //Floyd-Warshall算法 引入第三个点k
    	{
    		for (i = 1; i <= n; i++)
    		{
    			for (j = 1; j <= n; j++)
    			{
    				if (e[i][j] > e[i][k] + e[k][j])//借助第三个点的中转和原来直接去的距离相比较,如果更短就进行更新
    				{
    					e[i][j] = e[i][k] + e[k][j];
    				}
    			}
    		}
    	}
    

    4.分析

    因为中间有一个三重循环,所以复杂度为O(n^3).

    5.源码

    Floyd

    展开全文
  • 【MachineLearning】多分类与多标签算法(Multiclass and multilabel algorithms)的定义与区别 @(Machine Learning) 本文基于Sk-learn的官方文档: ...本文总结下该文档,并给出自己...

    【MachineLearning】多分类与多标签算法(Multiclass and multilabel algorithms)的定义与区别

    @(Machine Learning)

    本文基于Sk-learn的官方文档:
    http://scikit-learn.org/stable/modules/multiclass.html#classifier-chain
    本文总结下该文档,并给出自己的一些理解和解释,希望能帮助到需要的人。

    首先是四类类问题:多类别问题(Multiclass classification)、多标签问题(Multilabel classification)、多输出回归问题(Multioutput regression)、多任务问题(Multioutput-multiclass classification and multi-task classification)
    推荐一篇讲的很清楚的博客:
    https://blog.csdn.net/golden1314521/article/details/51251252
    - 多类别问题:表示超过2个类别的分类问题,比如:一个人是男和女就是是个二分类问题,多分类问题是在二分类的问题基础上面增加类别,比如一个水果,是梨、苹果还是橙子。此类问题是建立在一个样本只属于一个类别的假设基础上的。
    - 多标签问题:这类问题的目的是给每一个样本添加一系列的目标标签。和多分类问题的重要区别就是:每一个标签并非是互斥的。比如一个话题,它可以是政治、金融、教育的,可以是政治、金融的、也可以是教育的、当然也可以不属于上述任何一个内容的。
    - 多输出回归问题:可以看出是一个样本的多个回归问题,为一个样本的多个属性预测目标值,比如预测一个位置的温度、湿度等。
    - 多任务问题:我的理解是多分类问题的多标签版本。比如上述多标签问题的例子:一个话题,它可以是政治、金融、教育的,三个子问题是三个二分类:这个话题是或不是政治、是或不是金融、是或不是教育的。多任务分类就是把子问题扩展为多分类问题。比如:一个学生,数学分为ABC三个等级、语文分为ABC三个等级、英语分为ABC三个等级,要预测一个学生的语数英是AAA、AAB、BAC等级别就是一个多任务分类问题。这里的数学、语文、英语就是label、ABC就是class。

    关于多类别问题、多标签问题和多任务问题的关系,上述提到的博客中有一张很好的图:
    p

    展开全文
  • 与栈相反,队列(queue) 是一种先进先 (first in first out,缩写为FIFO )线性表。它只允许在表一端进行插入,而在另一端删除元素。在队列中,允许插入一端叫做队尾 (rear),允许删除一端则称为 队头...
  • 给出抽象数据类型复数的定义,并应用其写出求一元二次方程的算法,最后编写程序实现输入一个一元二次方程的三个复数系数,然后输出方程的两个得数根。 注:要求编写的程序是键状的,即能够检测出用户输入的错误,...
  • #include<stdio.h> #include <stdlib.h> #define MaxQSize 7 typedef int ElemType; typedef struct{ ElemType *base; int rear; int length; }Queue; Queue InitQueue(){ ... Q.l
  • 今天刷算法题,碰到了一个公司笔试小算法。此博客给出了实现过程,供大家参考学习!
  • 1.1 算法( 先给出算法的定义,才能给出算法的作用) 算法的三种定义: 1.任何良定义的计算过程,该过程取某个值或值的集合作为输入并产生某个值或值的集合作为输出 2.把输入转换成输出的计算步骤的一个...
  • 和表示大整数一样,需要考虑怎样表示椭圆曲线以及曲线上的点。...在这一节将给出一个详细的介绍。 5.1 群与点的定义 5.1.1. 椭圆曲线点群的定义 5.1.2. 椭圆曲线算法集 5.1.3. 点的定义 ...
  • 寻找非劣解集合是遗传算法求解多目标优化问题目标, 而标准遗传算法收敛性分析方法对多...本文利用有限马尔科夫链给出了遗传算法求解多目标优化问题两个收敛性定义, 并给出了一个实例研究及进一步 工作计划。
  • 日历检查工具:基于专有手动算法的多模式日历工具,该工具能够:1)定义日历副本(给出与请求年份具有相同日历的年份列表); 2)检查一周中的特定日期; 3)检查两个日期之间的天数; 4)在要求的日期之后X天之后...
  • 几个有关图的算法1(图定义和BFS)

    千次阅读 2012-07-09 22:32:44
    这几个算法主要是后面会有用,所以这里给出.1)图结构定义(跟前面差不多,只是为了方便算法,这里做了增加: /// /// 图类,由节点和边构成. /// public class Graphic { /// /// 用于图形访问临时...
  • 证明完了24个命题,在片断20的最后部分,莱布尼兹对于他的演算中提到的定义和公理给出了一大段注释。首先注释的是片断20给出的定义3,4,5,6。 这非常自然,因为在莱布尼兹《关于物和词之间联系的对话》一文中,他...
  • 算法——从时间复杂度开始说起标签(空格分隔): 算法1.算法的定义算法作为计算机程序设计中的重中之重,在著名的公式中: ...首先给出算法的定义,这并不是对的。但是这也是迫不得已而为之的。 算法就是一组
  • 昨晚上开始总结了一下常见的几种排序算法,由于之前我已经写了好几篇排序的算法的相关博文了现在总结一下的话可以说是很方便的,这里的目的是为了更加完整详尽的总结一下这些排序算法,为了复习基础的东西,从冒泡...
  • 定义:假定在待排序的记录序列中,存在多个具有相同的...回到主题,现在分析一下常见的排序算法的稳定性,每个都给出简单的理由。 (1)冒泡排序 冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻
  • 给出一个整数数组,返回两个索引,这两个索引对应数字和为一个特定值。假定上述问题只有一个解决方案,并且只能遍历数组一次 Example: Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] ...
  • 题目:输入三个数,输出这三个数中最大。 要求和提示: 1....定义4个变量x,y,z,max进行计算,max就是最终要输出最大值   相关可以求最小值,如果会做最大值,最小值也不
  • 本章将给出算法的定义和一些算法的例子; 还说明算法是一项技术, 就像硬件, 图形用户界面, 面向对象系统和网络一样; 什么是算法? 为什么算法值得研究? 相对于计算机中使用的其他技术来说算法的作用是什么? 本章将...
  • 萊布尼兹片断19和片断20最后注釋是关于公理,先给出公理1和公理2基本内容,然后我们来看莱布尼兹如何看待它逻辑加所依据这两个公理。 公理1:B⊕N=N⊕B。逻辑加交换律 公理2:A⊕A=A。逻辑加吸收律 ...
  • 经典问题:给出N个正整数,再给出M个正整数,问这M个数中每个数分别在N个数中是否出现过。 最直观思路:对每个欲查询正整数x,遍历所有N个数,看是否有一个数与x相等。这种做法时间复杂度为O(MN),当M和N很大...
  • 线性表的定义和特点 # 定义: 由n (n>0)个数据特性相同的元素构成的有限序列称为线性表。 # 对于非空线性表或者线性...一、下列给出线性表的抽象数据类型定义: ADT 线性表 (list) Data 线性表的数据对象集合为{a1,a
  • 深入浅PageRank算法

    2020-07-15 23:22:11
    文章目录一、引例二、有向图三、随机游走模型四、PageRank算法的基本定义五、PageRank算法的一般定义六、PageRank的计算6.1 幂法6.2 迭代法6.3 代数法 注:文本主要是学习完统计学习方法的复习概括 一、引例 出国...
  • 但总是感受不到算法的本质到底是什么? 是对基础数据结构的理解?还是题海战术的堆砌? 再加上找工作的着急忙慌,除了机械的做完一个算法题再来一个算法题以及疲于记忆各种各样题目解法外&#...
  • 算法设计方法

    千次阅读 2016-03-01 21:57:31
    算法的性质:算法可以有若干输入,这些输入是在算法开始时给出的初始值或条件;算法通常又有若干输出,是对输入进行加工后的计算结果。另外算法的性质有: (1)有穷性。一个算法必须在执行了有
  • 算法的复杂度

    2020-05-18 15:41:14
    算法的复杂度分为时间复杂度和空间复杂度; (1)时间复杂度 一个算法的执行时间大致上等于其所有语句执行时间的总和,对于语句的执行...以下给出了两个n×n阶矩阵相乘算法中的各条语句以及每条语句的语句频度。 语句

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,013
精华内容 2,005
关键字:

给出算法的定义