计算复杂性 - 解决现实生活中的问题

由MBA Skool团队出伟德亚洲手机投注网版 ,2014年2月15日发布

计算复杂性是对特定算法所需的计算时间的量度。在有多种算法可用于特定问题的情况下,任何特定算法的有效性都是根据时间约束来测量的。这是通过将算法分解为基本步骤,然后对每个步骤进行计数来完成。因此,步骤的数量更大,复杂性更大。例如,例如,如果我们采用两个5位二进制编号并将其XOR XOR XOR,则采用的步骤数为5,如果对100位二进制编号重复相同的过程,则步骤数为100。两种情况都是相同的;复杂性由数字的大小给出。


When we say size of a number n, it is defined as the number of binary bits which are required to denote ‘n’ in base 2. For example, 5 in base 10 when expressed in binary takes the form 101, thereby giving n = 3. Similarly 20 is given by 101002这使得n =5。现在,如果我们xor大小n = b的每个两个数字,所采用的步骤数将为“ b”。因此,我们可以说,Xing这些数字具有“ B”顺序的计算复杂性,而O(b)表示。可以将其应用于更简单的应用程序,例如添加,其中,如果我们要添加两个n位数字,则采取的最小步骤数(忽略上一步的任何携带)将等于n,因为我们从右到左接近。这是无法避免的,因为我们需要知道每个数字,然后才能添加它们。回到上面所述的XOR示例,如果我们要将数字的大小翻倍,我们最终将使所需步骤的大小增加一倍,从而增加所需的时间。要考虑的一个重要点是,计算复杂性不取决于机器的能力,换句话说,它与实施无关。该因素变得很重要,因为不同的机器可能需要不同的时间`同时处理相同的“ B”基本步骤。要考虑的另一个重要点是,对于具有定义为O(b)的计算复杂性的任何算法,如果我们要将问题的大小乘以x,那么计算时间也将具有相同的效果,即乘以x。

图片提供:freedigitalphotos.net,ddpavumba


大o符号用于描述复杂性理论中功能的渐近行为。它会以函数增长的速度告诉您。函数增长的速率称为顺序,因此字母o用作其符号。令F(X)和G(X)为实数定义的两个函数。然后,大o表示法将表示为:


且仅当存在某些常数n和c时,f(x)= o(g(x))(属于实数的x)

| F(x)|<= c | g(x)|对于所有x> n


基本上,这意味着我们的功能不能比定义时间依赖性复杂性的函数更快。


通常用作g(x)来描述时间依赖性的功能如下以越来越多的生长速率(C是恒定的)所写的。

o(1)常数

o(log(log)(n)对数

o(log(log((n))C)pologrogarithmic

o(o)n)线性

o(o)n2)二次

o(o)nC)多项式

o(o)Cn)指数


如上所述,在添加方面,添加两个二进制数的复杂性为O(b)。但是,如果我们要乘以这些数字,复杂性会变为o(b2)。我们可以举一个简单的示例来说明此更改。假设我们将乘以两个数字34和56。这将涉及以4个基本步骤乘法,然后进行相应的调整以获得最终结果。因此,这种情况的复杂性变为o(22)。同样,如果我们将要乘的数字的位大小加倍,则需要更改O [(2B)2] = o(4b2)。


因此,复杂性理论基本上基于解决问题所面临的困难来对问题进行分类。


这使我们了解了P和NP问题的概念:



1。确定性多项式时间(P)类型

    如果至少有一种可以解决该问题的算法,则基本上将问题分类为属于P(多项式时间)类的问题。该算法所采用的步骤数受“ n”中多项式限制,其中n给出了所使用的输入的长度。


    如果对于给定输入,完成算法的必不可少的步骤数是O(nk)对于某些非负整数k,其中k给出了所提供的输入的复杂性。使用多项式时间的算法被认为是快速,可行和有效的。除方形,对数和力量外,还可以使用多项式时间进行大量的日常数学应用,例如加法,减法,乘法和除法。


    确定性方法中出现的特定术语是算法的时间复杂性。它衡量任何算法所花费的时间作为代表用户或任何其他源提供的输入的字符串长度的函数。


    如上所述,算法的时间复杂性通常使用大符号表示。它消除了所有系数和其他低阶项。当以这种方式表达算法时,我们可以说它的时间复杂性已被描述渐近即,其输入大小具有接近无限的自由。为了说明这一点,我们可以采用算法的帮助,其中所有大小输入所需的时间n最多是5n3+ 3n。因此,该算法的渐近时间复杂性为O(n3


    我们在日常用法中发现的多项式时间算法的一些示例如下:

    • 在计算机科学中,应用的快速排序算法n整数以最大CN进行2给定常数的操作数量C。因此,运行时间由o表示(n2)使其成为多项式时间算法。
    • 同样如上所述,可以在多项式时间内表达加法,减法,乘法等算术操作


    2。非确定性多项式时间(NP)类型

      NP问题是一个具有解决方案的问题,输入解决方案和一个在多项式时间内运行的验证者。验证者必须同时考虑输入及其相应的解决方案,并告诉用户它们是否同步。


      NP本质上包括所有决策问题的集合,在该问题中,问题的状态,无论是“是”还是“否”,必须通过有效验证的证据来支持它的确如此。实际上,这些证据必须是经过验证在多项式时期,借助确定性的图灵机。NP以更正式的方式进行了等效的定义,代表了所有此类决策问题的收集,在多项式时间内已在多项式时间接受“是”实例。为了衡量上述两个定义的等效性,我们可以提及这样一个事实,即这样的非确定性机器上的算法作为图灵机被分为两个阶段 - 第一阶段涉及对解决方案的最接近猜测,这再次以非确定性的方式产生;第二阶段利用确定性算法来验证或拒绝上述猜测的工作,作为对当前问题的有效解决方案


      A fantastic example of non deterministic problem solving comes from ‘factoring’ wherein one needs to decide the factors (say a*b=N) of a particular large number N barring the number itself and 1. Theoretical analysts have observed it time and again that if we are to take two numbers of one thousand digits each and multiply them together in a computer, it takes hardly a few seconds to arrive at the result while if we feed this very output to the computer again to get it decomposed into factors, it’s possible that the computer may not figure out an efficient solution for millions of years. This raises the question as to why we need to go through so much of distress to arrive at factors of such a large number. And the answer, as it turns out is of paramount importance with a potential to change the state of an economy. Let’s say one of our friends wants to impersonate a bank. And unlike years back, when the transaction between banks happened in the form of gold bricks transported in trucks, the transactions now are done via online funds transfer through severely protected connections. As it turns out, the encryption algorithm they use to secure their transactions is called RSA. In RSA, each party has a secret key that consists of two numbers p & q – big prime numbers and then they have a public key say n which is equal to p*q. This public key is released to all so that other people are able to send messages via this network, which in turn will be decrypted by the partnering parties using the public key. Now let’s say our friend wants to intervene here. He is in charge of an efficient verifier which is capable of performing large divisions. He has n and then he obtains a P猜测给出n%p猜测= 0


      3。指数问题

        EXP引用可以在指数时间内解决的一系列问题。指数时间算法是在2个poly(n)上界限的时间,其中poly(n)是n中的多项式。即t(n)由o(2NK)对于一些恒定k。例如。n*n国际象棋板问题是EXP的问题类型。它不能在多项式时间内解决。


        r是指可以在有限的问题中解决的问题。这些问题基本上是可以解决的。r是指递归功能。这些问题可以通过有限时间的递归算法属于此类别。但是,可解决的问题是我们可用的一小部分问题。其余问题在数学上是无法解决的。


        现实生活中问题的复杂性分析:

        步骤1:为了在现实生活中运用计算复杂性,我们首先需要将现实生活中的问题转换为“是不是问题”,而不会改变其复杂性。转换需要输入中的阈值。问题通常是两种类型的 - 可行性或满足问题。例如。安排生产设施,生产过程的时间表和截止日期,并在工作中安排时间表。下面介绍了现实生活实例的某些标准示例:


        一机截止日期安排实例:在这里,我们将机器操作WRT安排到其处理时间的可行性,以便满足截止日期。

        让处理时间定义为工作的截止日期,为DI,我从1到n不等。


        那么我们的问题可以表示为:

        问题:我们有一组开始时间si> 0,i的i> 0从1到n,使得sj确实属于i≠j的集合[si,si+ti)在限制每个任务si+ti <= di的截止日期的限制下,时间?



        两个机器线平衡实例:我们的任务是在已知处理时间时均匀地将两台机器K和J之间分配。可以表示如下:


        让我的处理时间为ti,其中我从1到n不等。让那里有一个数字v

        问题:我们可以将索引i = 1至n分开,以便在机器K上所花费的时间与机器j上的过程所花费的时间小于或等于V之间的差异。


        上述问题的更限制的版本是,当需要完美平衡时,即v = 0。

        那么问题将是:我们可以将索引i = 1至n分开,以使计算机k上的过程所花费的时间等于机器J上的过程的时间。

        这个相等的时间问题称为两个分区问题。与两个机器线平衡相比,这个问题更难处理,因为它更受限制


        第2步:因此,我们需要了解的下一步是如何找到任何问题的复杂性。因此,一些有助于解决问题的基本事物如下:当需要进行完美的资源分配时,测序的决策既要考虑您当前的位置又是您之前的位置,将一组对象分开,每个子集的约束,以找出满足属性,最大化或最大化集合的工会和交叉点的最大子结构。用限制值替换阈值值也可能会改变其复杂性。因此,我们需要非常谨慎。重要的是要弄清楚是什么使问题困难,可能很难获得平衡。两个分区就是一个例子。另一方面,问题很容易平衡所有事物,但很难最大程度地减少未获得完美组合的负面影响。独立的集合需要多边形的最大大小顶点集,以使其中的两个由边缘连接是第二类型的示例。因此,确定类型并相应地工作。


        随着我们解决更多的问题,我们发展了直观的能力来识别问题的困难部分。让我们看看如何识别NP困难问题。首先确定一个严重的问题,然后考虑一个简单的问题来对比。比较两个问题,并确定使问题容易的原因。约束的一些示例如下:


        整数编程(IP):最大化C*X受AX <= B的约束,其中X是整数。

        对比:线性编程很容易,当约束具有固定的两个维度之一(单模型)之一时,整数编程也是如此。尺寸在这里是指编号。变量和总约束。

        两机加权流动时间最小化:给定两个并行处理器和一组具有单独处理时间和权重的作业,请找到一个时间表,以最大程度地减少完成时间的加权总和。

        对比:如果给定的权重或时间相等,那么对于任何否而言,问题都很容易。处理器。一次运行相等的权重或相等的处理器约束。


        斯坦纳树:给定图形g =(v,e),边缘长度和顶点V的子集S,在最小总长度中找到一个包含S的树的树(该树可能包含V -S中的顶点;飞机上的正方形。)

        对比:最小跨越树问题,其中S = V很容易。


        通常,硬性问题可以通过动态编程来解决。如果动态编程无济于事,那么其他方法(例如货架数学软件的关闭或重型数学编程方法和启发式方法)也可以提供帮助。


        可以使用线性编程,单纯形方法和整数编程等解决简单问题。


        减少:

        在计算复杂性中,还原定义为将一种类型的问题转化为另一种问题。问题X可以减少问题y,如果X的算法也可以用于求解。这意味着问题y比X更容易解决。我们使用两种类型的减少类型:多一减少和减少图灵。通过将问题的实例映射到其他问题的实例中来完成许多减少。另一方面,通过解决一个问题,假设另一个问题很容易,那么减少了图灵。图灵的减少比多一减少要强。但是,尽管问题更易于设计,但更强大的减少在分离问题方面无效。


        减少在容易时很有用。例如,一个困难的NP完整问题可以简化为琐碎的问题。此外,它可以将无理问题转换为可决定的问题。减少用于停止问题之类的问题,以证明语言不是可决定的,即当给出字符串W的输入时,Turing Machine M会停止(H(M,W))。据说这种语言是不可决定的。现在,如果f(m)是确定图灵机的输入语言是否为空的问题,那么我们通过减少h知道F是不可决定的。


        结论:

        对计算复杂性的基本理解有助于经理确定他要解决的时间解决现实生活中的问题,并判断问题的实际实例有多大。同样,选择算法比选择硬件和数据结构的选择更为重要。将问题归类为NP-HARD的简单,将告诉我们解决问题的可用方法。然后,可以完成最终方法,以了解其他方面,例如大小,财务股权,理想的准确性和时间限制。计算复杂性是一种不可避免的现象。大多数问题难以解决。但是,如果我们足够努力地研究它们,每次都几乎很容易。作为经理,计算复杂性的基本学习和应用有助于我们在与操作有关的问题中主要有助于我们。在上面的文本中,某些示例(例如计算机调度,遵守截止日期,最大程度地减少迟到的工作),我们可以将其用于生产设施中的问题,并减少使用适当的方法来解决特定类型的复杂性的时间。


        本文由Pooja Punjabi和IIM Kozhikode的Manash Hazarika


        参考:

        • http://en.wikipedia.org/wiki/computational_complexity_theory
        • http://theory.stanford.edu/~trevisan/notes/complexitynotes02.pdf
        • http://www2.isye.gatech.edu/~ctovey/tovey.tutorial.pdf
        • http://staff.science.uva.nl/~ulle/teaching/comsoc/2012/slides/comsoc-complexity-tutorial.pdf

        文章中表达的观点是个人的。这些文章仅用于教育和学术目的,并由MBA Skool团队上传。伟德亚洲手机投注网

        如果您有兴趣为我们撰写文章,在这里提交


        分享此页面:
        脸书分享 鸣叫 分享LinkedIn
        Baidu
        map