精华内容
下载资源
问答
  • 通过对以上几个问题的分析,我们对算法有了一个初步的了解.在解决某些问题时,需要设计出一系列可操作或可计算的步骤,通过实施这些步骤来解决问题,通常把这些步骤称为解决这些问题的算法.在数学中,现代意义上的...

    通过对以上几个问题的分析,我们对算法有了一个初步的了解.在解决某些问题时,需要设计出一系列可操作或可计算的步骤,通过实施这些步骤来解决问题,通常把这些步骤称为解决这些问题的算法.

    在数学中,现代意义上的“算法”通常是指可以用计算机来解决的某一类问题的程序或步骤,这些程序或步骤必须是明确和有效的,而且能够在有限步之内完成.

    问题:我们要解决解决一类问题,我们可以抽象出其解题步骤或计算序列,他们有什么样的要求?

    (1)算法与一般意义上具体问题的解法既有联系,又有区别,它们之间是一般和特殊的关系,也是抽象与具体的关系。算法的获得要借助一般意义上具体问题的求解方法,而任何一个具体问题都可以利用这类问题的一般算法来解决。

    (2)算法的五个特征

    ①有穷性:一个算法的步骤序列是有限的,它应在有限步操作之后停止,而不能是无限地执行下去。

    ②确定性:算法中的每一步应该是确定的并且能有效地执行且得到确定的结果,而不应当是模棱两可的。

    ③逻辑性:算法从初始步骤开始,分为若干个明确的步骤,前一步是后一步的前提,只有执行完前一步才能进行下一步,并且每一步都准确无误,才能完成问题。

    ④不唯一性:求解某一个问题的算法不一定只有唯一的一个,可以有不同的算法。

    ⑤普遍性:很多具体的问题,都可以设计合理的算法去解决,如心算、计算器计算都要经过有限的、事先设计好的步骤加以解决。

    展开全文
  • 此外,一个算法具有下列5个重要特性: 1) 有穷性 一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。 2) 确定性 算法中每一条指令必须有确切的含义,读者...

    http://c.biancheng.net/cpp/shujujiegou/

    算法(algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。此外,一个算法还具有下列5个重要特性:

    1) 有穷性

    一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。

    2) 确定性

    算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。即对于相同的输入只能得出相同的输出。

    3) 可行性

    一个算法是可行的,即算法中描述的操作都是吋以逋过已经实现的基本运算执行有限次来实现的。

    4) 输入

    一个算法有零个或多个的输入,这些输入取自于某个特定的对象的集合。

    5) 输出

    一个算法有一个或多个的输出,这些输出是同输入有着某种特定关系的量。

    通常设计一个“好”的算法应考虑达到以下目标:

    • 正确性:算法应当能够正确地解决求解问题。
    • 可读性:算法应当具有良好的可读性,以助于人们理解。
    • 健壮性:当输入非法数据时,算法也能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
    • 效率与低存储量需求:效率是指算法执行的时间,存储量需求是指算法执行过程中所需要的最大存储空间,这两者都与问题的规模有关。
    展开全文
  • 对比了进化算法(基因算法)与确定性算法(共轭梯度法)在优化控制问题中的优化效率。两种方法都与分散式优化策略-Nash对策进行了结合,并成功地应用于优化控制问题。计算模型采用绕NACA 0012翼型的位流流场。区域...
  • Paxos算法是莱斯利·兰伯特(英语:Leslie Lamport,LaTeX中的“La”)于1990年提出的种基于消息传递且具有高度容错特性的一致性算法。 问题和假设 分布式系统中的节点通信存在两种模型:共享内存(Shared ...

    Paxos算法莱斯利·兰伯特(英语:Leslie Lamport,LaTeX中的“La”)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。

    问题和假设

    分布式系统中的节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。

    基于消息传递通信模型的分布式系统,不可避免的会发生以下错误:进程可能会慢、被杀死或者重启,消息可能会延迟、丢失、重复,在基础 Paxos 场景中,先不考虑可能出现消息篡改即拜占庭错误的情况。

    Paxos 算法解决的问题是在一个可能发生上述异常的分布式系统中如何就某个值达成一致,保证不论发生以上任何异常,都不会破坏决议的一致性。一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。一个通用的一致性算法可以应用在许多场景中,是分布式计算中的重要问题。

    因此从20世纪80年代起对于一致性算法的研究就没有停止过。

    为描述Paxos算法,Lamport虚拟了一个叫做Paxos的希腊城邦,这个岛按照议会民主制的政治模式制订法律,但是没有人愿意将自己的全部时间和精力放在这种事情上。所以无论是议员,议长或者传递纸条的服务员都不能承诺别人需要时一定会出现,也无法承诺批准决议或者传递消息的时间。但是这里假设没有拜占庭将军问题(Byzantine failure,即虽然有可能一个消息被传递了两次,但是绝对不会出现错误的消息);只要等待足够的时间,消息就会被传到。另外,Paxos岛上的议员是不会反对其他议员提出的决议的。

    对应于分布式系统,议员对应于各个节点,制定的法律对应于系统的状态。各个节点需要进入一个一致的状态,例如在独立Cache对称多处理器系统中,各个处理器读内存的某个字节时,必须读到同样的一个值,否则系统就违背了一致性的要求。一致性要求对应于法律条文只能有一个版本。议员和服务员的不确定性对应于节点和消息传递通道的不可靠性。

    算法

    算法的提出与证明

    首先将议员的角色分为 proposers,acceptors,和 learners(允许身兼数职)。

    • proposers 提出提案,提案信息包括提案编号和提议的 value;
    • acceptor 收到提案后可以接受(accept)提案,若提案获得多数派(majority)的 acceptors 的接受,则称该提案被批准(chosen);
    • learners 只能“学习”被批准的提案。

    划分角色后,就可以更精确的定义问题:

    1. 决议(value)只有在被 proposers 提出后才能被批准(未经批准的决议称为“提案(proposal)”);
    2. 在一次 Paxos 算法的执行实例中,只批准(chosen)一个 value;
    3. learners 只能获得被批准(chosen)的 value。
    在 Leslie Lamport 之后发表的paper中将 majority 替换为更通用的 quorum 概念,但在描述classic paxos的论文  Paxos made simple 中使用的还是majority的概念。
    

    另外还需要保证 progress。这一点以后再讨论。

    作者通过不断加强上述3个约束(主要是第二个)获得了 Paxos 算法。

    批准 value 的过程中,首先 proposers 将 value 发送给 acceptors,之后 acceptors 对 value 进行接受(accept)。为了满足只批准一个 value 的约束,要求经“多数派(majority)”接受的 value 成为正式的决议(称为“批准”决议)。这是因为无论是按照人数还是按照权重划分,两组“多数派”至少有一个公共的 acceptor,如果每个 acceptor 只能接受一个 value,约束2就能保证。

    于是产生了一个显而易见的新约束:

    P1:一个 acceptor 必须接受(accept)第一次收到的提案。
    

    注意 P1 是不完备的。如果恰好一半 acceptor 接受的提案具有 value A,另一半接受的提案具有 value B,那么就无法形成多数派,无法批准任何一个 value。

    约束2并不要求只批准一个提案,暗示可能存在多个提案。只要提案的 value 是一样的,批准多个提案不违背约束2。于是可以产生约束 P2:

    P2:一旦一个具有 value v 的提案被批准(chosen),那么之后批准(chosen)的提案必须具有 value v。
    

    注:通过某种方法可以为每个提案分配一个编号,在提案之间建立一个全序关系,所谓“之后”都是指所有编号更大的提案。

    如果 P1 和 P2 都能够保证,那么约束2就能够保证。

    批准一个 value 意味着多个 acceptor 接受(accept)了该 value。因此,可以对 P2 进行加强:

    P2a:一旦一个具有 value v 的提案被批准(chosen),那么之后任何 acceptor 再次接受(accept)的提案必须具有 value v。
    

    由于通信是异步的,P2a 和 P1 会发生冲突。如果一个 value 被批准后,一个 proposer 和一个 acceptor 从休眠中苏醒,前者提出一个具有新的 value 的提案。根据 P1,后者应当接受,根据 P2a,则不应当接受,这种场景下 P2a 和 P1 有矛盾。于是需要换个思路,转而对 proposer 的行为进行约束:

    P2b:一旦一个具有 value v 的提案被批准(chosen),那么以后任何 proposer 提出的提案必须具有 value v。
    

    由于 acceptor 能接受的提案都必须由 proposer 提出,所以 P2b 蕴涵了 P2a,是一个更强的约束。

    但是根据 P2b 难以提出实现手段。因此需要进一步加强 P2b。

    假设一个编号为 m 的 value v 已经获得批准(chosen),来看看在什么情况下对任何编号为 n(n>m)的提案都含有 value v。因为 m 已经获得批准(chosen),显然存在一个 acceptors 的多数派 C,他们都接受(accept)了v。考虑到任何多数派都和 C 具有至少一个公共成员,可以找到一个蕴涵 P2b 的约束 P2c:

    P2c:如果一个编号为 n 的提案具有 value v,那么存在一个多数派,要么他们中所有人都没有接受(accept)编号小于 n 
    的任何提案,要么他们已经接受(accept)的所有编号小于 n 的提案中编号最大的那个提案具有 value v。
    

    可以用数学归纳法证明 P2c 蕴涵 P2b:

    假设具有value v的提案m获得批准,当n=m+1时,采用反证法,假如提案n不具有value v,而是具有value w,根据P2c,则存在一个多数派S1,要么他们中没有人接受过编号小于n的任何提案,要么他们已经接受的所有编号小于n的提案中编号最大的那个提案是value w。由于S1和通过提案m时的多数派C之间至少有一个公共的acceptor,所以以上两个条件都不成立,导出矛盾从而推翻假设,证明了提案n必须具有value v;

    若(m+1)..(N-1)所有提案都具有value v,采用反证法,假如新提案N不具有value v,而是具有value w',根据P2c,则存在一个多数派S2,要么他们没有接受过m..(N-1)中的任何提案,要么他们已经接受的所有编号小于N的提案中编号最大的那个提案是value w'。由于S2和通过m的多数派C之间至少有一个公共的acceptor,所以至少有一个acceptor曾经接受了m,从而也可以推出S2中已接受的所有编号小于n的提案中编号最大的那个提案的编号范围在m..(N-1)之间,而根据初始假设,m..(N-1)之间的所有提案都具有value v,所以S2中已接受的所有编号小于n的提案中编号最大的那个提案肯定具有value v,导出矛盾从而推翻新提案n不具有value v的假设。根据数学归纳法,我们证明了若满足P2c,则P2b一定满足。

    P2c是可以通过消息传递模型实现的。另外,引入了P2c后,也解决了前文提到的P1不完备的问题。

    算法的内容

    要满足P2c的约束,proposer提出一个提案前,首先要和足以形成多数派的acceptors进行通信,获得他们进行的最近一次接受(accept)的提案(prepare过程),之后根据回收的信息决定这次提案的value,形成提案开始投票。当获得多数acceptors接受(accept)后,提案获得批准(chosen),由acceptor将这个消息告知learner。这个简略的过程经过进一步细化后就形成了Paxos算法。

    在一个paxos实例中,每个提案需要有不同的编号,且编号间要存在全序关系。可以用多种方法实现这一点,例如将序数和proposer的名字拼接起来。如何做到这一点不在Paxos算法讨论的范围之内。

    如果一个没有chosen过任何proposer提案的acceptor在prepare过程中回答了一个proposer针对提案n的问题,但是在开始对n进行投票前,又接受(accept)了编号小于n的另一个提案(例如n-1),如果n-1和n具有不同的value,这个投票就会违背P2c。因此在prepare过程中,acceptor进行的回答同时也应包含承诺:不会再接受(accept)编号小于n的提案。这是对P1的加强:

    P1a:当且仅当acceptor没有回应过编号大于n的prepare请求时,acceptor接受(accept)编号为n的提案。
    

    现在已经可以提出完整的算法了。

    决议的提出与批准

    通过一个决议分为两个阶段:

    1. prepare阶段:
      1. proposer选择一个提案编号n并将prepare请求发送给acceptors中的一个多数派;
      2. acceptor收到prepare消息后,如果提案的编号大于它已经回复的所有prepare消息(回复消息表示接受accept),则acceptor将自己上次接受的提案回复给proposer,并承诺不再回复小于n的提案;
    2. 批准阶段:
      1. 当一个proposer收到了多数acceptors对prepare的回复后,就进入批准阶段。它要向回复prepare请求的acceptors发送accept请求,包括编号n和根据P2c决定的value(如果根据P2c没有已经接受的value,那么它可以自由决定value)。
      2. 在不违背自己向其他proposer的承诺的前提下,acceptor收到accept请求后即批准这个请求。

    这个过程在任何时候中断都可以保证正确性。例如如果一个proposer发现已经有其他proposers提出了编号更高的提案,则有必要中断这个过程。因此为了优化,在上述prepare过程中,如果一个acceptor发现存在一个更高编号的提案,则需要通知proposer,提醒其中断这次提案。

    实例

    用实际的例子来更清晰地描述上述过程:

    有A1, A2, A3, A4, A5 5位议员,就税率问题进行决议。议员A1决定将税率定为10%,因此它向所有人发出一个草案。这个草案的内容是:

    现有的税率是什么?如果没有决定,则建议将其定为10%.时间:本届议会第3年3月15日;提案者:A1
    

    在最简单的情况下,没有人与其竞争;信息能及时顺利地传达到其它议员处。

    于是, A2-A5回应:

    我已收到你的提案,等待最终批准
    

    而A1在收到2份回复后就发布最终决议:

    税率已定为10%,新的提案不得再讨论本问题。
    

    这实际上退化为二阶段提交协议。

    现在我们假设在A1提出提案的同时, A5决定将税率定为20%:

    现有的税率是什么?如果没有决定,则建议将其定为20%.时间:本届议会第3年3月15日;提案者:A5
    

    草案要通过侍从送到其它议员的案头. A1的草案将由4位侍从送到A2-A5那里。现在,负责A2和A3的侍从将草案顺利送达,负责A4和A5的侍从则不上班. A5的草案则顺利的送至A4和A3手中。

    现在, A1, A2, A3收到了A1的提案; A4, A3, A5收到了A5的提案。按照协议, A1, A2, A4, A5将接受他们收到的提案,侍从将拿着

    我已收到你的提案,等待最终批准
    

    的回复回到提案者那里。

    而A3的行为将决定批准哪一个。

    https://zh.wikipedia.org/zh-cn/Paxos%E7%AE%97%E6%B3%95#

     

    Paxos在原作者的《Paxos Made Simple》中内容是比较精简的:

    Phase 1

    (a) A proposer selects a proposal number n and sends a prepare request with number n to a majority of acceptors.

    (b) If an acceptor receives a prepare request with number n greater than that of any prepare request to which it has already responded, then it responds to the request with a promise not to accept any more proposals numbered less than n and with the highest-numbered pro-posal (if any) that it has accepted.

    Phase 2

    (a) If the proposer receives a response to its prepare requests (numbered n) from a majority of acceptors, then it sends an accept request to each of those acceptors for a proposal numbered n with a value v , where v is the value of the highest-numbered proposal among the responses, or is any value if the responses reported no proposals.

    (b) If an acceptor receives an accept request for a proposal numbered n, it accepts the proposal unless it has already responded to a prepare request having a number greater than n.

    借用paxos图解文中的流程图可概括为:

    实例及详解

    Paxos中有三类角色ProposerAcceptorLearner,主要交互过程在ProposerAcceptor之间。

    ProposerAcceptor之间的交互主要有4类消息通信,如下图:

    这4类消息对应于paxos算法的两个阶段4个过程:

    • phase 1
      • a) proposer向网络内超过半数的acceptor发送prepare消息
      • b) acceptor正常情况下回复promise消息
    • phase 2
      • a) 在有足够多acceptor回复promise消息时,proposer发送accept消息
      • b) 正常情况下acceptor回复accepted消息

    因为在整个过程中可能有其他proposer针对同一件事情发出以上请求,所以在每个过程中都会有些特殊情况处理,这也是为了达成一致性所做的事情。如果在整个过程中没有其他proposer来竞争,那么这个操作的结果就是确定无异议的。但是如果有其他proposer的话,情况就不一样了。

    paxos中文wiki上的例子为例。简单来说该例子以若干个议员提议税收,确定最终通过的法案税收比例。

    以下图中基本只画出proposer与一个acceptor的交互。时间标志T2总是在T1后面。propose number简称N。

    情况之一如下图:

    A3在T1发出accepted给A1,然后在T2收到A5的prepare,在T3的时候A1才通知A5最终结果(税率10%)。这里会有两种情况:

    • A5发来的N5小于A1发出去的N1,那么A3直接拒绝(reject)A5
    • A5发来的N5大于A1发出去的N1,那么A3回复promise,但带上A1的(N1, 10%)

    这里可以与paxos流程图对应起来,更好理解。acceptor会记录(MaxN, AcceptN, AcceptV)

    A5在收到promise后,后续的流程可以顺利进行。但是发出accept时,因为收到了(AcceptN, AcceptV),所以会取最大的AcceptN对应的AcceptV,例子中也就是A1的10%作为AcceptV。如果在收到promise时没有发现有其他已记录的AcceptV,则其值可以由自己决定。

    针对以上A1和A5冲突的情况,最终A1和A5都会广播接受的值为10%。

    其实4个过程中对于acceptor而言,在回复promise和accepted时由于都可能因为其他proposer的介入而导致特殊处理。所以基本上看在这两个时间点收到其他proposer的请求时就可以了解整个算法了。例如在回复promise时则可能因为proposer发来的N不够大而reject:

    如果在发accepted消息时,对其他更大N的proposer发出过promise,那么也会reject该proposer发出的accept,如图:

    这个对应于Phase 2 b):

    it accepts the proposal unless it has already responded to a prepare request having a number greater than n.

    总结

    Leslie Lamport没有用数学描述Paxos,但是他用英文阐述得很清晰。将Paxos的两个Phase的内容理解清楚,整个算法过程还是不复杂的。

    至于Paxos中一直提到的一个全局唯一且递增的proposer number,其如何实现,引用如下:

    如何产生唯一的编号呢?在《Paxos made simple》中提到的是让所有的Proposer都从不相交的数据集合中进行选择,例如系统有5个Proposer,则可为每一个Proposer分配一个标识j(0~4),则每一个proposer每次提出决议的编号可以为5*i + j(i可以用来表示提出议案的次数)

    展开全文
  • 五个特性:有穷性,确定性,可行性,输入,输出 效率的度量: 时间复杂度,空间复杂度 1.1数据结构的基本概念 1.数据 数据是信息的载体,是描述客观事物属性的数,字符以及所有能够输入到计算机当中并被计算机程序...

    绪论
    数据结构(三要素)
    逻辑结构
    线性结构:线性表,栈,队列
    非线性结构“树,图,集合”
    存储结构(物理结构)
    数据的运算

    五个特征
    算法定义
    五个特性:有穷性,确定性,可行性,输入,输出
    效率的度量:
    时间复杂度,空间复杂度在这里插入图片描述

    1.1数据结构的基本概念
    1.数据
    数据是信息的载体,是描述客观事物属性的数,字符以及所有能够输入到计算机当中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。
    2.数据元素
    数据元素是数据的基本单位,通常作为一个整体进行考虑和处理,一个数据元素可以由若干数据项组成,数据项是构成数据元素的不可分割的最小的单位,例如,学生记录就是一个数据元素。他是由学号,姓名,性别等数据项组成的。
    3数据对象
    数据对象是具有相同性质的数据元素的集合,是数据的一个自己,例如,整数数据对象是集合N={0,±1,+,2,…}
    4.数据类型
    数据类型是一个值的集合和定义在此集合上的一组操作的总称
    1.原子类型。其值不可再分的数据类型
    2.结构类型:其值可以再分解成为若干成分(分量)的数据类型
    3.抽象数据类型:抽象数据组织以及与之相关的操作
    5.数据结构
    护具结构是相互之间存在一种或者多种特定关系的数据元素的集合。在任何的问题昂中,数据元素都不是鼓励存在的,他们之间存在某种关系,这种数据元素相互之间关系称为结构。
    数据结构包括三方面的内容:逻辑结构,存储结构和数据的运算。

    数据的逻辑结构和存储结构是密不可分的两个方面,一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。

    1。1.2数据结构的三要素
    1.数据的逻辑结构
    逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据,他和数据的存储无关,是独立于计算机的,数据的逻辑结构可以分为线性结构和非线性结构,线性表示典型的线性结构,集合,树,图示典型的非线性结构,数据的逻辑结构分类如图所示
    在这里插入图片描述
    集合:结构中的数据元素之间除了同属于一个集合以外,别无其他关系。
    线性结构:结构当中的数据元素之间只存在一对一的关系
    树形结构:结构当中的数据元素之间存在一对多的关系
    图状结构或者网状结构:结构当中的数据元素之间存在多堆垛的关系
    2.数据的存储结构
    存储结构是指数据结构在计算机当中的表示又称为映像,也称为物理结构,他包括数据元素的表示和关系的表示。数据的存储结构是用计算机语言实现的逻辑结构,他依赖于计算机语言,数据的存储结构主要有顺序村粗,链式存储,索引存储,散列存储、
    在这里插入图片描述
    1.顺序存储:把裸机上相邻的元素存储在物理位置上相邻的存储单元当中,元素之间的关系由存储单元的临界关系来体现,其优点是可以实现随机存取,每个元素占用最少的存储空间,缺点是只能使用相邻的一整块存储单元,因此可能产生较多的外部碎片。
    2.链式存储:不要求裸机上相邻的元素在物理位置上也相邻,借助指示元素的存储地址来表示元素之间的逻辑关系,其优点是不会出现碎片的线性,能够充分利用所有的存储单元,缺点是每个元素因为存储指针而占用额外的存储空间,而且只能够实现顺序存取。
    3)索引存储:在存储元素信息的同事,还要建立附加的索引表,索引表当中的每项称为索引项。索引项的一般形式是(关键字,地址),其优点是检索速度快,缺点是附加的索引表额外占用存储空间。另外,增加和删除数据的时候也要修改索引表,因而会花费较多的时间
    4)散列存储:根据元素的关键词直接计算机出该元素的存储地址,又称为哈希存储(Hash。其优点是检索,增加和删除结点的操作都非常的快,缺点是如果散列函数不好,则可能出现元素存储单元的冲突,而解决冲突会增加时间和空间的开销。
    3.数据的运算:施加在数据上的运算包括运算的定义和实现,运算的定义是针对逻辑结构,指出运算的功能,运算的实现是针对存储结构的,指出与少奶奶的具体的操作步骤。

    对于两种不同的1,他们的逻辑结构和物理结构完全有可能相同,比如二叉树和二叉排序树,二叉排序树可以采用二叉树的逻辑表示和存储方式,前者通常用语表示层次关系,而后者通常用语排序和查找,虽然他们的与少奶奶都有建立树,插入节点,删除节点,和查找节点等操作,但是对于二叉树和二叉排序树,这些与少奶奶的定义是不同的,以查找节点为例,二叉树的时间复杂度为o(n),而二叉排序树的时间复杂度为p(log2n)

    1.2算法和算法的评价

    1.2.1算法的基本概念
    算法(Algorithm)是对特定的问题的求解步骤的一中描述,他是指令的有限序列,其中的每条指令表示一个或者多个操作,此外,一个算法还具有下列5个重要特性
    1.有穷性
    一个算法必须总在执行有穷步之后才能够结束,而且每一步都可在有穷时间内完成
    2.确定性:算法当中的每条指令必须有确切的含义,对于相同的输入只能够得出相同的输出
    3.可行性:
    算法当中描述的操作都可以通过已经实现的基本运算执行有限次来实现
    4.输入
    一个算法有零个或者多个输入,这些输入取自某个特定的对象的集合
    5.输出:一个算法有一个或者多个输出,这些输出是和输入有着某种特定的关系的量
    通常:设计一个好的算法应该来考虑达到以下的目标
    1.正确性
    算法应该能够正确的解决求解问题
    2.可读性
    算法应该具有良好的可读性,来帮助人们理解
    3.健壮性
    输入非法的数据的时候,算法能够适当的做出反应或者进行处理,而不会产生莫名其妙的输出结果
    4.效率与低存储量的需求:
    效率是指算法的执行的时间,存储量需求是指算法执行过程当中所需要的最大的存储空间,这两者都和问题的规模有关。
    1.2.2算法效率的度量
    算法效率的度量是通过时间复杂度和空间复杂度来描述的。
    1.时间复杂度
    一个语句的频度是指该语句在算法当中被重复执行的次数,算法当中所有的语句的频度之和记为T(n),他是该算法的问题规模n的函数,时间复杂度主要分析T(n)的数量级,算法当中的基本运算(最深层循环内的语句)的频度与T(n)同数量级,因此通常采用算法当中的基本运算的频度f(n)来分析算法的时间复杂度,因此算法大的时间复杂度记为
    T(n)=o(f(n))
    在这里插入图片描述
    算法恶时间复杂度不仅依赖于问题的规模n,也取决于等待输入的数据的性质(比如输入数据元素的初始状态),例如,在数组A[0…n-1]当中,查找给定值k的算法大致如下:

    i=n-1;
    while(i>=0&&(A[i]!=k))
    i--;
    return i;
    

    该算法当中的语句3(基本运算)的频度不仅与问题的规模n有关,而且与输入实例当中的A的各个元素的取值以及k的取值有关
    1.如果A当中没有与k相等元素,则语句3的频度f(n)=n;
    如果A的最后一个元素等于k,则语句3的频度f(n)是常数0
    最坏的时间复杂度是指在最坏的情况下,算法的时间复杂度
    平均时间复杂度:是指所有可能输入实例在等概率的出现的情况下,算法的期望运行的时间
    最好的时间复杂度:是指在最好的情况下,算法的时间复杂福。
    在这里插入图片描述
    2.空间复杂度
    算法的空间度S(n)定义为该算法所耗费的存储空间,他是问题规模n1的函数,记为S(n)=o(g(n))
    一个程序在执行的时候除了需要存储空间来存放本身所用的指令,常数,变量和输入的数据意外,还需要一些对数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间,如果输入的数据所占的空间只是取决于问题的本身和算法无关,则只需要分析除了输入和程序之外的额外恶空间
    算法的原地工作是指算法所需要的辅助的空间为常量即o(1)

    展开全文
  • 算法五个重要特性

    万次阅读 2016-09-07 10:27:37
    一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件; 输出(Output) 一个算法一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的; 确定性...
  • 算法五个基本特性

    千次阅读 2020-03-19 19:04:38
    算法五个基本特性 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列。 算法五个基本特性: 1. 输入 2. 输出 3. 有穷性:有限步骤,有限时间内完成,不会无限循环 4. 确定性:每步骤确定含义,...
  • 2、有输出:算法具有一个或多个输出; 3、有穷性:算法在执行有限的步骤后,自动结束而不会出现无限循环,并且每个步骤在可接受的时间内完成; 4、确定性:算法的每个步骤都有明确的含义,不会出现二义性; 5、可行...
  • 该项目结合了机器学习算法和精心选择的面部特征来精确确定一个人的性格。 先决条件 该项目假定您具有Python及其数据科学库(包括Numpy,Keras,Tensorflow和Pandas)的高级知识的中级知识。 此外,有关CNN的知识以及...
  • 算法5个重要特性: ①有穷性: 一个算法必须总是在执行有穷步之后结束,且每一步都可在有穷时间内完成。 ②确定性算法中的每条指令必须有确切的含义,不会产生二义性,并且对于相同的输入只能得出相同的输出。 ③...
  • 算法的定义通常,定义算法为"为解决某一特定任务而规定的一个指令序列"。算法5个基本特性① 有输入。一个算法必须有0个或多个输入。它们是算法开始运算前给予算法的量。这些输入取自于特定的对象的集合。它们可以...
  • 为了适应基于RFID的实时位置跟踪服务中传感器数据的随时间变化的特性,提出了RFID Data-PPMU不确定度的测量算法(基于粒子滤波和粒子群优化的RFID测量不确定性算法)数据)在本文中提出。 PPMU可以根据KL距离来自...
  • 算法五个特征

    万次阅读 2014-06-05 10:46:08
    算法个基本特征:输入、输出、有穷性、确定性和可行性. 下面我们来具体阐述一下: (1)输入:算法有0个或多个输入,比如一个简单的函数就没有参数; (2)输出:算法有1个或多个输出,如果没有输出还要这算法干啥用...
  • 因此,确定如何有效地从具有环的对照数据集中鉴定具有环的pre-miRNA是当务之急。 在这项工作中,提出了种修剪算法以从pre-miRNA的多茎环中识别主要分支。 采用堆栈算法以四种不同模式描述pre-miRNA的二...
  • 算法特性

    2017-11-04 23:07:14
    算法五个基本特性:输入,输出,有穷性(不会无限循环),确定性(每步骤都具有确定的含义),可行性(算法的每一步都必须是可行的,可以执行有限次数完成) 3.好的算法:正确性,可读性,健壮性,高效率和低...
  • 问题: 说明“阅读本套书的步骤” 其实不是一个真正的算法。因为在其算法特性中,它至少缺少3个! 我的回答:肯定有:有限性、确定性 正确答案: 它不满足有限性、确定性和可行性。可能没有输出 加入我们...
  • 算法特性

    2020-04-10 16:14:23
    2、确定性,是指算法执行的每一步骤在一定条件下只有一条执行路径,也就是相同输入只能有一个唯一的输出结果。 3、可行性,是指算法每一步骤都必须可行,能够通过有限的执行次数完成。 4、输入和输出。输入,是指...
  • 针对滑坡危险预测中降雨确定因素不能有效刻画及处理和现有的OPTICS-PLUS聚类算法需要设置密度阈值、时间复杂度高等问题进行了研究,为了提高滑坡危险预测准确率,提出种不确定NNSB-OPTICS聚类算法并应用于...
  • 一个基于特征向量的近似网页去重算法 曹玉娟1,2 牛振东1 彭学平1 江 鹏1 (1北京理工大学计算机科学技术学院 100081)  (2北京航天飞行控制中心 100094) 摘 要 在搜索引擎的检索结果页面中,用户经常会...
  • 算法

    2019-04-21 19:46:29
    算法具有0个或多个输入 至少有一个或多个输出 有穷性 在执行有限的步骤后,自动结束不会无限循环,在可接受的时间内完成 确定性 算法的每一步骤都有确定的含义,不会出现二义性 可行性 2.算法的要求 正确性 可读性 ...
  • 算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址...
  • 提出一个在时域和频域同时具有良好特性的信号分析算法,在从一个复杂信号中提取某个或某几个信号分量时,具有较高的应用价值,特别是在检测信号中的微弱瞬态成分时,该算法不仅能检测到微弱瞬态成分的存在,而且还...
  • 什么是算法算法有哪些特征

    万次阅读 2019-11-11 07:44:45
    什么是算法算法有哪些特征算法定义:为解决一个问题而采取的方法和步骤,称为“算法”。 算法五特征: ①有穷性 ②确定性 ③有零个或多个输入 ④有一个或多个输出 ⑤有效性 ...
  • 算法特性

    2011-11-21 10:20:49
    算法具有五个基本特性:输入、输出、有穷性、确定性和可行性。
  • 但是,一些现有的人群感知解决方案通常更喜欢仅使用一个或几个特征来区分不确定对象。 在本文中,由于较少特征的局限,我们建议利用多种特征来区分不确定对象以进行人群感知。 为了区分具有多个特征的不确定对象...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 202,630
精华内容 81,052
关键字:

一个算法应具有确定性等五个特性