随着问题的增加,是否有任何变得容易的问题?


62

这可能是一个荒谬的问题,但是随着输入量的增加,是否有可能实际上变得更容易解决的问题?我怀疑是否存在任何实际问题,但是也许我们可以发明具有这种性质的退化问题。例如,当它变大时,它可能开始“自我解决”,或者表现为其他怪异的方式。


7
想到的与此属性有关的一个实际问题是,当将密码哈希表述为“给定n哈希,至少破解一个哈希表”时,便会出现无盐密码破解问题。由于破解速度与n呈线性比例关系,因此运行时间将与1 / n成正比–区别在于,由于破解是随机的并且没有恒定的时间上限,因此我们实际上无法指定确定的时间。
阿蒙

1
@amon运行时间不会像那样缩放。仅读取您输入的散列就需要花费时间!1/nnn
David Richerby '16

3
您是说从绝对还是相对的角度来说更轻松?您允许采用哪些成本措施?您是否需要严格降低成本,还是仅仅从某种程度上提高成本?
拉斐尔

2
@DavidRicherby在此示例中,只要我不对绝对成本作任何陈述,就可以忽略读取输入的成本。相反,速度随输入线性增加。因此,即使考虑读取输入的成本,n•T(1)> T(n)。即,对于此问题,即使问题是可分割的,也比同时拆分输入要容易地解决大量输入。我并不是说所有n的T(n)> T(n + 1)。
阿蒙

4
对于每个想要发布该表格的另一个答案的人,“某些输入是问题的问题,再加上关于该答案的大量提示”:这是行不通的。长度为的最难输入是使用所有位询问问题且不给出提示的输入。处理带有很多提示的简短问题很容易,这并不意味着最坏的情况下运行时间就很好。nn
David Richerby '16

Answers:


39

不,这是不可能的:至少,不是从渐近的意义上讲,在这种情况下,您需要让问题变得永远变得更加容易,永远是。n

设是解决此类问题的最佳可能运行时间,其中是输入的大小。请注意,运行时间是算法执行的指令数的计数,因此它必须是非负整数。换句话说,对于所有,。现在,如果考虑函数,我们将看到没有严格单调递减的函数。(无论是什么,它都必须是有限的,例如 ;但是由于单调严格地减小,所以和T(n)nT(n)NnT:NNT(0)T(0)=cTT(c)0T(c+1)1出于类似的原因,没有函数渐近严格地递减:我们可以类似地证明不存在运行时间函数,其中存在使得对于所有,严格单调递减(任何此类函数最终都必须变为负数)。T(n)n0nn0T(n)

因此,由于运行时间必须为非负整数的简单原因,因此不存在这样的问题。


请注意,此答案仅涵盖确定性算法(即最坏情况下的运行时间)。这并不排除使用随机算法的可能性,该算法的预期运行时间永远严格单调减少。我不知道这种算法是否可能存在。我感谢贝尼·切尔涅涅夫斯基·帕斯金的这一观察


9
这是一个很好的证明,但我不同意这一前提。代替要求严格单调递减的运行时间,问题可能更合理地是要求存在a,b且a <b的函数,以便T(a)> T(b),即其非严格单调递减。然后,当然可以找到合适的整数函数。但是为什么要整数?我的印象是,运行时间表示时间,而不是指令计数(图灵机当然除外),并且T表达式可以使用非整数运算,例如log()或非整数指数。
阿蒙

2
@amon“运行时间表示时间,而不是指令计数”绝对不是。运行时间始终是指令计数。任何其他事情都将无法推理,因为这将取决于不可行的许多实现细节。
David Richerby '16

3
问题很模糊,我看不出它如何排除成本函数,例如。现在,但是对于“小”,所以相对而言,问题“变得容易”。(当然,绝对成本会逐渐增加)。T(n)=n2(1+ϵ)n+nT(n)nT(n)n2n
拉斐尔

2
@Raphael,变得越来越容易不是问题:随着变大,变大,因此一旦变大,则随着变大,问题就变得更加棘手。我确实在回答的第一句话中指出,任何问题都可以永远变得越来越容易。当然,问题可以在一段时间内变得更容易解决(例如,可以降低),但是它并不能永远变得更加容易。T(n)nT(n)nnnT(n)nc
DW

1
即使是整数时间,对于随机算法,预期时间(或分布的任何其他度量)也可以是分数,并且可以从上方逐渐接近某个常数。[这并不意味着实际上存在这样的问题,只是“没有这样的功能T存在 ”的论点是不够的。]
Beni Cherniavsky-Paskin

25

尽管这并不是您所提问题的答案,但是Boyer-Moore字符串搜索算法非常接近。正如罗伯特·摩尔(Robert Moore)在其有关该算法的网页上所说,

我们的算法具有独特的属性,即大致来说,模式越长,算法运行得越快。

换句话说,一般而言,该算法在源字符串中搜索目标字符串的实例,并在固定的源字符串中搜索,目标字符串越长,算法运行得越快。


10
可以说,模式不是问题的大小,而是要搜索的字符串的长度。就像上面的David Richerby的评论一样,我认为模式的长度比问题本身(看看模式是否匹配特定长度的字符串)更能说明问题的解决方法(有关搜索字符串的信息)。 。)
凯文(Kevin

4
@Kevin该语句建议搜索长度为的模式nnlogn

10

显然,从纯数学,纯CS算法的角度来看,这是不可能的。但是实际上,有几个真实的示例,这些示例表明在扩大项目规模时变得更加容易,最终用户并不直观。

路线:您获得的路线越长,有时路线就越容易。例如,如果我希望Google Maps向我提供向西行驶3000英里的路线,我可以开车到西海岸-并获得越野驾驶说明。但是,如果我想向西行驶6000英里,我将得到一条非常简单的指示:从纽约市到北海道的飞机。从算法上讲,给我一条包含交通,道路,天气等信息的越野航线是相当困难的,但是告诉我上飞机并在数据库中查找航班相对要简单得多。难度与距离的ASCII图:

           |     /
           |    /
Difficulty |   /                  ____-------
           |  /           ____----
           | /    ____----
            ---------------------------------
                       Distance

渲染:说我想要一个面的渲染和1000个面的渲染;这是用于广告牌广告,因此两个最终图像都必须为10000px x 5000px。现实地渲染一张脸很困难-要以数千个像素的分辨率使用真正强大的机器-但对于1000张脸的人群来说,每个脸只需要十个像素即可,并且可以轻松克隆!我可能可以在笔记本电脑上渲染1000张脸,但是渲染10000px的现实脸将需要很长时间并且功能强大。难度与渲染对象的ASCII图,显示了将n个对象渲染到设置大小的图像上的难度如何快速下降但又缓慢下降:

           | -    
           |- -                     _________
Difficulty |   --      ______-------            
           |     ------      
           |       
            ---------------------------------
                        Objects

硬件控制:许多与硬件有关的事情变得更加容易。“将马达X旋转1度”是困难的和/或不可能的,您必须处理“马达X 322度”不必处理的所有事情。

短期任务:假设您希望每秒打开项目X(非常少的时间)。通过增加X运行的时间,您将需要较少复杂的软件和硬件。


在您的“路线”示例中,请准确说明什么是计算问题以及什么是实例。我一点都不知道您的6k英里示例是一个较大的实例还是仅仅是某个事物的简单部分的示例(例如,如果我给您一个大图连接图和一个孤立的顶点,通常要求最短路径是“困难”,但要求从孤立顶点到任何地方的最短路径是微不足道的)。同样,对于您的渲染示例,实际的计算问题是什么?您要衡量复杂度的实例是什么?
David Richerby '16

渲染示例似乎并不是同一问题的实例:第一个是渲染单个图像;第二个是渲染单个图像。第二个是渲染许多小图像,然后将这些图像的多个副本粘贴到某个区域。
David Richerby '16

我认为要传递参数的wrt将是2个城市的名称,而n将是对它们进行编码的字符数。
emory

3

有情况。在这种情况下,成功标准是数据的函数,而不是试图找到单个答案。例如,其结果以置信区间表示的统计过程会变得更加容易。

我正在考虑的一个特殊情况是问题已经从离散行为过渡到连续行为,例如流体流动。将小问题解决到一定误差范围内可能涉及对所有离散交互进行建模,这可能需要一台超级计算机。连续行为通常可以简化操作,而不会在相关的误差范围之外产生结果。


2

这个问题是有趣且有用的,因为我们信息学的哲学是解决问题,我们越阅读越困难。但是,实际上,以“简单”方式可以轻松表示以典型方式(困难)提出的大多数问题。即使知道DW的响应(考虑到轻松并不意味着更快,也就意味着“慢一点”,这是错误的;因此您不必寻找负时间,而不必去寻找渐近时间)。

找到一个诀窍是将解决方案的一部分(如提示)作为条目,并考虑问题的条目(如常量参数)。

示例:伦敦和巴黎之间最长的乘车方式是避免两次访问法国和英国小镇而不访问其他国家?考虑到您必须在Ashford之前去伯明翰,在凡尔赛之前去奥尔良,在Limoge之前去拉罗谢尔,等等。

显然,长条目的问题比短条目的问题容易。

使用示例:想象一下由机器管理的游戏,计算机的IA必须确定他是否必须在游戏中探索更多内容以找到更多提示,否则,现在是否该推断出最佳假设是时候了? 。


2
您的示例不起作用。大型实例因为它们具有太多的提示而无法确定图的顶点的线性顺序,这确实很容易。但是,由于它们给出的图形几乎没有任何提示而很大的实例与普通的汉密尔顿路径问题一样困难。因此,解决该问题的任何算法的最坏情况下的运行时间将至少与汉密尔顿路径的最佳算法的最坏情况下的运行时间一样糟糕,这似乎并不“超级容易”。
David Richerby '16

@David,您的回答是完全错误的:1.条目不是图形:大图形是参数。因此,汉密尔顿问题被转换为一个常数(很大,但是一个常数)。2.条目是解决问题的方法,因此:如果更大,则提供了提示的组合表示。输入一个提示会有所帮助,两个提示会加倍,三个提示会接近4两倍...,因为您正在消除可能的解决方案。因此,这不是哈密顿量,这是一个特定图的解决方案,问题在于该解决方案的各个部分。
Juan Manuel Dato

我认为您的论点很有趣,因为较大的实例在某种意义上“比较容易”,但是我认为原始问题的答案最终是“否”。由于图形是有限的,因此只有有限的许多可能的提示。因此,每个实例都可以在固定时间内解决(例如,使用查找表)。即使在(渐近)计算机科学视图中(直观地)更容易发现较大的实例,所有实例也同样困难(可以在固定时间内解决)。
Tom van der Zanden'1

@Tom,我同意您对复杂性的考虑将是不变的,但是问题在于我们如何接受新的提示:如果按照我们的计算长条目的哲学并不比短条目更好,那么我们就必须改变哲学-因为这是事实:长条目意味着更容易解决的问题。所以我们不能以这种方式工作...我会推荐我的书,但我没有声誉...
Juan Manuel Dato

nlogn

1

考虑一个程序,该程序将您对密码的了解作为输入,然后尝试对其进行破解。我认为这可以满足您的需求。例如:

  • 无输入->蛮力破解所有符号和任意长度的单词
  • 密码的长度->用该长度的单词暴力破解所有符号
  • 包含的符号->缩小要检查的符号列表
  • ...
  • 包含多个出现次数和长度的符号->仅计算排列
  • 所有符号顺序正确->基本上可以自行解决

我应该补充一点,这是一个技巧,因为这样的问题与输入大小成反比。您可以省略一层抽象,说输入大小对于没有输入来说是很大的(检查所有符号和单词的长度),而如果在开头输入正确的密码则很小。

因此,这全都取决于您允许多少抽象。


2
b

0

事实上,我确实有一个问题,随着数据的增加,问题会越来越小。我的一个应用程序记录了特定产品(例如奶酪)的属性。属性例如是CheeseType,Brand,Country,Area,MilkType等。每个月左右,我都会得到一份清单,其中列出了这段时间内进入市场的新奶酪。现在,这些属性是由一群人手动键入的。有些人打错字,或者只是不知道所有属性的值。

当您在我的数据库中进行搜索时,我会尝试根据这些属性根据统计数据预测奶酪的味道。发生的事情是,对于每个属性,我最终都有一系列值;有些有效,有些无效。仅当我有足够的数据时,才能消除或纠正这些无效的值。这是关于在真实值和噪声之间取得差异,而不消除稀有但有效的值。

可以想象,音量低时,噪声太重要,无法正确修复。如果您有5个Cheddar实例,1个Brie实例,1个Bri实例和1个Chedar实例,我如何分辨哪个是正确的,哪个是错字?随着音量的增加,错别字往往会保持很低,但稀有值会得到一些关键的增量,从而使其摆脱噪音(有经验支持)。在这种情况下,我可以想象例如50000 Cheddar,3000 Brie,5 Bri,15 Chedar。

所以是的,当您有足够的数据时,一些问题最终会解决。


1
由于通常的原因,此操作失败。大量输入可能是人们告诉您许多不同类型的奶酪的信息,而不是他们告诉您有关几种奶酪的信息,但其中一些拼写错误。同样,不清楚“简易”是否应该解释为“对结果允许更高的置信度”。
David Richerby '16

这是一个现实生活中的问题(我已经遇到过两次),只有少量数据才能解决。随着交易量的增加,它可以而且甚至更容易区分错误的价值。它的优点是回答“随着问题的增加,是否有任何问题会变得更容易?” 出现多少种奶酪都没有关系,最终,如果数量足够,它们的“命中率”将比错别字更大。这是cs .stackexchange,而不是数学,因此问题有所不同,有时解决问题仅是对结果具有更高的信心。
克里斯

这不是电视节目Numbers的前提吗?或至少是某些情节-我知道我特别记得一个场景,数学家评论说,他用来解决当前问题的算法对于更大的数据集会变得更加有效。
丹·亨德森

2
“变得更有效”!=“变得更容易”。
David Richerby

-1

考虑NP完全问题3-SAT。如果通过提供形式为x_i = true / false的输入来不断扩大问题,您要么最终将单个析取关系转换为两个变量子句,从而产生了一个绝对值为P的2-SAT问题,要么您最终得到了是非题。

对于x_i = true / false输入中存在冗余的情况(很多时候提供相同的输入,或者矛盾的输入),您可以轻松地对输入进行排序,或者忽略冗余值,或者如果值矛盾则报告错误。

无论如何,我认为这代表了一个“现实”的问题,随着输入数量的增加,这个问题将变得更容易解决。“更轻松”的方面是将NP完全问题转换为P问题。您仍然可以通过提供荒谬的输入来对系统进行游戏,以使仅排序所需的时间就比强加于问题的时间长。

现在,一个非常酷的场景是,如果我们愿意接受T(0)(利用上面答案中的DW表示法)可以是无限的。例如,T(0)等效于解决图灵的暂停问题。如果我们能设计出一个问题,使更多的投入将其转化为可解决的问题,那我们就大吃一惊了。请注意,将其渐近地转换为可解决的问题还不够,因为这与强行解决问题一样糟糕。


1
这些特定的输入变得更容易。但是,当您考虑所有可能的输入时,通常会随着添加更多子句而使3SAT变得更加困难:硬输入是没有这些“提示”子句的输入。如果您不允许常规输入,则需要准确说明允许的输入。
David Richerby '16

首先,我们同意增加更多的输入会增加运行时间。我上面说的基本上是一样的。其次,我明确地说,我们正在采用现有的3-SAT,仅添加形式为x_i = true / false的输入。我认为这已经很清楚了,我不需要做任何进一步的澄清。我认为您正在努力对我所写的内容进行最错误的解释。请不要为自己烦恼。
v vv cvvcv

1
不,认真 您正在解决什么计算问题?一个计算问题是确定一组字符串的成员资格(假设一组公式可以避免对编码的烦恼)。您声称要确定一组较长的公式比确定一组短公式容易得多的公式集是什么?只要您设法做到这一点,我很确定您的主张会崩溃。
David Richerby '16

您能否明确表达对“我的主张”的理解?一旦您尝试做到这一点,我很确定您将不再浪费互联网带宽。
v vv cvvcv

我是计算机科学家,而不是读心者。提出正确的主张是您的工作,而不是我的工作。
David Richerby'1

-1

这个问题问:“随着输入量的增加,是否有可能实际上变得更容易解决的问题?” 如果输入是算法要用于工作的资源,该怎么办。众所周知,资源越多越好。下面是一个示例,其中员工越多越好。


n
tp


n

3)输出:
输出是员工要执行的任务之间的路径。每个路径都与采用该路径的员工数量相关联。例如:

n1
n2
n3
n4
n5

4)可能的解决方案:
一个可能的解决方案是首先计算从A到最近节点的最短路径。这将是一条正向路径。然后递归计算每个访问的任务的前向路径。结果是一棵树。例如:

          一种
      公元前
    德

nn1n2n20

n=n=1

n


6
感谢您分享您的想法。通常在计算机科学中,算法被理解为接受一个位序列作为其输入,并输出另一个位序列。有了这种标准的理解,我看不出这个答案如何有意义。如果您对算法有不同的想法,那么我认为如果您编辑问题以描述算法的含义,这会有所帮助(因为听起来您不是在以与标准用法相对应的方式使用该术语)据我了解)。
DW

输入可以简单地是一个数字(资源的数量)。这将影响算法必须进行的额外计算的数量。我将编辑答案以提供更具体的示例。
yemelitc '16

感谢您的修改-使其更加清晰。现在,我看到您并没有像我最初想象的那样将计算解决方案的成本与执行它的成本相混淆。但是现在我们处于通常的情况。首先,读取输入至少需要花费线性时间。其次,困难的情况不是您给一棵小树和数以千计的人,而是您给一棵大树和相对较少的人。(例如,如果您允许我使用一百万个比特,我将选择一棵约有一千个顶点的树,并给您五个人,而不是一棵有五个顶点和一千个人的树。)
David Richerby

我同意。似乎我们所有人最终都对它持批评态度,这与原始问题引诱我们的意图不同!但是希望您能理解“输入为资源”的想法:无论工作多大,人越多越好。在渐近意义上,您绝对是正确的,我应该将其归咎于非负整数。
yemelitc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.