算法集的基数


15

有人在讨论中提出(他认为)至少可以有连续数量的策略来解决特定问题。具体的问题是交易策略(不是算法而是策略),但是我认为这不是我要问的重点。

这让我开始思考算法集的基数。我一直在搜索,但是什么也没想出来。我一直在想,由于图灵机使用有限的字母集运行,并且磁带必须是可索引的,因此可数,所以不可能有无数的算法。我的集合论无疑是生疏的,因此我不确定我的推理是完全正确的,而且我可能无法证明这一点,但这是一个有趣的想法。

这套算法的基数是什么?


1
正如Yuval Filmus提到的,图灵机数量众多。但是有许多不统一的布尔电路族,因为它们可以计算任何布尔值函数。但这可能不是您所说的“算法”。
恢复莫妮卡

Answers:


28

非正式地将算法描述为用于完成某些任务的书面指令的有限序列。更正式地说,它们被识别为图灵机,尽管您同样可以将它们描述为计算机程序。

您使用的精确形式并不重要,但基本要点是每种算法都可以记为有限的字符序列,其中的字符是从一些有限的集合中选择的,例如罗马字母,ASCII或零和一。为了简单起见,我们假设零和一。任何零和一的序列都只是用二进制写的自然数。这意味着最多有无穷多个算法,因为每种算法都可以表示为自然数。

为了获得满分,您应该担心某些自然数可能无法编写有效的程序,因此算法可能少于自然数。但是,(对于奖金积分,你也可能会想,如果有可能的是两个不同的自然数代表相同的算法)print 1print 2print 3等都是算法和各不相同,所以有至少可数无限多的算法。

因此,我们得出结论,算法集是无限的。


评论不作进一步讨论;此对话已转移至聊天
吉尔斯(Gilles)'所以

10

该算法集是无限的。这是因为每种算法都有一个有限的描述,例如图灵机。

一种算法具有有限描述的事实使我们可以将一种算法输入另一种算法,这是可计算性理论的基础。例如,它使我们能够制定暂停问题。


7

至少解决特定问题的连续策略数量

“连续谱”可能应该表示实数……在顶部使用“至少”和该词是荒谬的。有点口口相传:无数个无限大是相当大的,但无数个无限大是……大于大。更是如此。难以置信。

因此,让我们把它丢到窗外。看看我们正在处理哪种无限是非常简单的(而且直观,即使您的朋友从未听说过任何理论计算机科学):

  • 任何算法都可以使用任何图灵完备的语言来实现;选择您最喜欢的现实世界语言(Java,C等)的毒药,以使这变得神秘。所有这些都等同于任何人都可以想到的理论算法集。请注意,每种算法本身都是有限的,即没有一种算法会写出无限多个符号。
  • 不要考虑复杂的图灵机。您选择的语言使用简单的文件来存储其源代码。每个文件都是少量数字(又名字节)的集合。重要的是这些数字绝对是整数,而不是连续的。(如果您是一个纯粹主义者,并且希望停留在理论体系中,请用“符号”代替“字节”一词,它不会改变任何内容。)如果您担心分散在多个文件(和库)中的大型程序以及其他内容),然后只需将它们压缩到一个压缩的归档文件(即单个文件)中即可。
  • 现在,您可以双向地为每个文件分配一个整数。我们只是简单地将文件的整个位/字节乱七八糟地写入其中,最后得到的二进制数非常大。在遥远的过去,人们实际上是这样做的:他们将已编译的二进制程序打印为一长串的十六进制数字在杂志上;您可以输入它们,但永远不会把它们看成是数字(通常方便地分为8位或16位数字组以使输入更加容易)。
  • 因此:每个程序都可以用整数表示,尽管可以是一个任意大的整数。反之亦然,每个整数都可以立即被琐碎地转移到文件中并扔给编译器(很明显,其中只有一小部分是有效程序,但现在对我们来说已经无关紧要了)。
  • 最后,程序和算法都是整数的子集。因此,只能存在无数个。
  • 注意,单个算法有许多不同的实现,这一事实对我们有利,也就是说,其中许多整数会压缩为同一算法(不同表示形式)。因此,如果可数无穷还不是最小的无穷大,我们将不得不担心算法的数量会更小,但肯定不会更大(即不可数)。

具体问题是交易策略(不是算法而是策略)

我不知道你的朋友对“战略”意味着什么;我认为他的意思有点像算法,但不够详细,无法将其破解到计算机中?还是在执行过程中某种程度上取决于人类的“直觉”?如果是这样,那么这些只是无关紧要的细节。就我们在​​CS中使用的意义而言,人类还没有找到对过程的描述比“算法”更强大或更强大的描述。


3
回复:“'Continuum'应该被认为是实数...使用'至少'和那个词在一起是荒谬的”:没有任何东西在“顶层”,更不用说“荒唐”了。 。实数集多于实数集,因此谈论大于连续体的集是很正常的。
ruakh

6

参见 Gödel编号,这是计算机科学中的一个基本事实,即算法是可数的,并且通过递归可枚举集也是如此。

算法是可数的,很容易证明没有一种算法可以验证形式系统中的每个集合(将真值分配给问题)。这等同于将算法问题分配给将问题集映射为布尔值的每个函数。但是,这些功能的集合是不可数的(通常与问题集的幂集的基数相同,因此是不可数的)。

我希望这可以使人们对为什么算法必须比任何函数“功能都不那么强大”(这是可数的)(在这里忽略连续统假设)有一些直觉。


2

如果不是一开始就需要一种策略可以用一种算法来实现,而忽略了现实中的离散化效果,则可以接受以下内容作为参数化交易策略:

abab

ab


0

如果我们将算法视为用二进制*编写的计算机程序,那么算法的数量就是(整数)二进制数的数量。因此,算法的基数就是整数的基数。

*证明图灵机可以运行所有算法,并且计算机可以运行任何程序图灵机的证据,将使答案不必要地冗长。前者可能取决于算法的定义,但我不认为您使用的是无可争议的交易策略。


1
这对现有答案有什么作用?
David Richerby

“证明图灵机可以运行所有算法的证据……将使答案不必要地冗长”。这将使答案变得不可能,因为您无法真正证明“ Church-Turing论文”
John Coleman,

@DavidRicherby它增加了简洁性。
user558317 '18

1
@JohnColeman断言没有证据就不可能提供证据吗?我的意思是a)OP可能不在乎,因为b)这是定义问题。这个问题似乎包含一个假设:“由于图腾机使用一组有限的字母,并且磁带必须是可索引的,因此是可数的,因此不可能有不可数的算法。”
user558317

0

其他答案已经说明,在标准计算模型(Turing Machines,Lambda Calculus等)中,算法集是无穷的。

但是,还有其他一些理论计算模型,其中算法集是无限的。例如,Blum–Shub–Smale机器具有无穷无穷的指令集1,因此它们的算法集也无穷无穷的无限。


1确切地说,指令集本身是有限的,但它是使用无数个无限集(有理函数)进行参数化的。


理性函数不是可数的吗?
本·米尔伍德

@BenMillwood您能否简要地勾勒的为什么会是这样一个证据吗?
Mark C

x0Rf:xx0

哦,我假设常量也必须是有理数。没关系。
本·米尔伍德

-1

由于图灵机使用一组有限的字母进行操作,并且磁带必须是可索引的,因此可数

给定特定的尺寸,图灵机数量有限,并且尺寸也很多。只要是有限的,一组可数的数字都是可数的。字母的大小是图灵机数量的一个因素,但是磁带的大小不是。如果允许字母具有许多字符,那么将有无数的机器(每个实数都可以编码为符号序列)。

.5.5


n

不管怎样,拥有无数的算法意味着什么?您只能写下无数个字。从什么意义上说,您不能写下某种算法?
David Richerby

@DavidRicherby是的,我搞混了一些东西。但是通常可以使用“算法”来指代一系列选择。从这个意义上讲,基于输入选择数字是一种“算法”,尽管它不是可计算的。
累积

在计算机科学中,“算法”和“可计算”是同一回事。算法是图灵机。
David Richerby
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.