这可能是一个荒谬的问题,但是随着输入量的增加,是否有可能实际上变得更容易解决的问题?我怀疑是否存在任何实际问题,但是也许我们可以发明具有这种性质的退化问题。例如,当它变大时,它可能开始“自我解决”,或者表现为其他怪异的方式。
这可能是一个荒谬的问题,但是随着输入量的增加,是否有可能实际上变得更容易解决的问题?我怀疑是否存在任何实际问题,但是也许我们可以发明具有这种性质的退化问题。例如,当它变大时,它可能开始“自我解决”,或者表现为其他怪异的方式。
Answers:
不,这是不可能的:至少,不是从渐近的意义上讲,在这种情况下,您需要让问题变得永远变得更加容易,永远是。
设是解决此类问题的最佳可能运行时间,其中是输入的大小。请注意,运行时间是算法执行的指令数的计数,因此它必须是非负整数。换句话说,对于所有,。现在,如果考虑函数,我们将看到没有严格单调递减的函数。(无论是什么,它都必须是有限的,例如 ;但是由于单调严格地减小,所以和出于类似的原因,没有函数渐近严格地递减:我们可以类似地证明不存在运行时间函数,其中存在使得对于所有,严格单调递减(任何此类函数最终都必须变为负数)。
因此,由于运行时间必须为非负整数的简单原因,因此不存在这样的问题。
请注意,此答案仅涵盖确定性算法(即最坏情况下的运行时间)。这并不排除使用随机算法的可能性,该算法的预期运行时间永远严格单调减少。我不知道这种算法是否可能存在。我感谢贝尼·切尔涅涅夫斯基·帕斯金的这一观察。
尽管这并不是您所提问题的答案,但是Boyer-Moore字符串搜索算法非常接近。正如罗伯特·摩尔(Robert Moore)在其有关该算法的网页上所说,
我们的算法具有独特的属性,即大致来说,模式越长,算法运行得越快。
换句话说,一般而言,该算法在源字符串中搜索目标字符串的实例,并在固定的源字符串中搜索,目标字符串越长,算法运行得越快。
显然,从纯数学,纯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运行的时间,您将需要较少复杂的软件和硬件。
这个问题是有趣且有用的,因为我们信息学的哲学是解决问题,我们越阅读越困难。但是,实际上,以“简单”方式可以轻松表示以典型方式(困难)提出的大多数问题。即使知道DW的响应(考虑到轻松并不意味着更快,也就意味着“慢一点”,这是错误的;因此您不必寻找负时间,而不必去寻找渐近时间)。
找到一个诀窍是将解决方案的一部分(如提示)作为条目,并考虑问题的条目(如常量参数)。
示例:伦敦和巴黎之间最长的乘车方式是避免两次访问法国和英国小镇而不访问其他国家?考虑到您必须在Ashford之前去伯明翰,在凡尔赛之前去奥尔良,在Limoge之前去拉罗谢尔,等等。
显然,长条目的问题比短条目的问题容易。
使用示例:想象一下由机器管理的游戏,计算机的IA必须确定他是否必须在游戏中探索更多内容以找到更多提示,否则,现在是否该推断出最佳假设是时候了? 。
事实上,我确实有一个问题,随着数据的增加,问题会越来越小。我的一个应用程序记录了特定产品(例如奶酪)的属性。属性例如是CheeseType,Brand,Country,Area,MilkType等。每个月左右,我都会得到一份清单,其中列出了这段时间内进入市场的新奶酪。现在,这些属性是由一群人手动键入的。有些人打错字,或者只是不知道所有属性的值。
当您在我的数据库中进行搜索时,我会尝试根据这些属性根据统计数据预测奶酪的味道。发生的事情是,对于每个属性,我最终都有一系列值;有些有效,有些无效。仅当我有足够的数据时,才能消除或纠正这些无效的值。这是关于在真实值和噪声之间取得差异,而不消除稀有但有效的值。
可以想象,音量低时,噪声太重要,无法正确修复。如果您有5个Cheddar实例,1个Brie实例,1个Bri实例和1个Chedar实例,我如何分辨哪个是正确的,哪个是错字?随着音量的增加,错别字往往会保持很低,但稀有值会得到一些关键的增量,从而使其摆脱噪音(有经验支持)。在这种情况下,我可以想象例如50000 Cheddar,3000 Brie,5 Bri,15 Chedar。
所以是的,当您有足够的数据时,一些问题最终会解决。
考虑NP完全问题3-SAT。如果通过提供形式为x_i = true / false的输入来不断扩大问题,您要么最终将单个析取关系转换为两个变量子句,从而产生了一个绝对值为P的2-SAT问题,要么您最终得到了是非题。
对于x_i = true / false输入中存在冗余的情况(很多时候提供相同的输入,或者矛盾的输入),您可以轻松地对输入进行排序,或者忽略冗余值,或者如果值矛盾则报告错误。
无论如何,我认为这代表了一个“现实”的问题,随着输入数量的增加,这个问题将变得更容易解决。“更轻松”的方面是将NP完全问题转换为P问题。您仍然可以通过提供荒谬的输入来对系统进行游戏,以使仅排序所需的时间就比强加于问题的时间长。
现在,一个非常酷的场景是,如果我们愿意接受T(0)(利用上面答案中的DW表示法)可以是无限的。例如,T(0)等效于解决图灵的暂停问题。如果我们能设计出一个问题,使更多的投入将其转化为可解决的问题,那我们就大吃一惊了。请注意,将其渐近地转换为可解决的问题还不够,因为这与强行解决问题一样糟糕。
这个问题问:“随着输入量的增加,是否有可能实际上变得更容易解决的问题?” 如果输入是算法要用于工作的资源,该怎么办。众所周知,资源越多越好。下面是一个示例,其中员工越多越好。
3)输出:
输出是员工要执行的任务之间的路径。每个路径都与采用该路径的员工数量相关联。例如:
4)可能的解决方案:
一个可能的解决方案是首先计算从A到最近节点的最短路径。这将是一条正向路径。然后递归计算每个访问的任务的前向路径。结果是一棵树。例如:
一种 公元前 德