用数学符号表示编程中使用的字符串

7

现在我是一名程序员,最近发现自己在数学方面很差,决定从那时起专注于它,所以如果我的问题冒犯了您的智慧,请原谅。

在数学中,是否有编程中使用的字符串概念?即字符的排列。

例如,假设我想将以下内容翻译为数学符号:

let s be a string of n number of characters.

原因是我想在查找有关字符串 s 的其他信息时使用该表示法,例如它的长度:len(s)

那么在数学上如何正式表示这样的东西呢?


更具实际意义地说,假设我想数学上解释这样一个函数:

fitness(s,n) = 1 / |n - len(s)|

或者更加“程序员友好”的方式来表达:

fitness(s,n) = 1 / abs(n - len(s))

我用这个函数来解释给定遗传算法的适应度函数是如何工作的;问题是找到具有5个字符的字符串,并且我需要按照它们的适应度分数升序排序,该分数由上述函数给出。
所以我的问题是,如何用数学符号表示上述伪代码?

两点简短的评论。首先,如果s是n个字符的字符串,那么按定义len(s)不就是n吗?我有点难以理解分母,因为n好像等于len(s)。其次,我查看了我们的姐妹网站Mathematics,并使用http://math.stackexchange.com/search?page=2&tab=relevance&q=length进行了长度查询。在图论(似乎与您的问题有关)中,他们只使用一封信表示长度,例如http://math.stackexchange.com/q/9293/5220。 - rajah9
不,n 不是 len(s)n 是我的“最优解”目标,而 len(s) 只是给定染色体的字符数。 - Andreas Grech
是的,它们使用“n”,但我不需要表示任何长度;我想知道如何表示字符串长度以及所涉及的符号。 - Andreas Grech
2个回答

9
您可以使用语言理论的符号来讨论正则语言、上下文无关语法、编译器理论等,以下是一个快速概述:
  • 字符集被称为字母表。您可以写成:“让A是ASCII字母表,一个包含128个ASCII字符的集合。”

  • 字符串是一系列字符。ε是空字符串。

  • 一组字符串正式称为语言。一个常见的语句是:“让sL是语言L中的一个字符串。”

  • 连接字母表会产生字符串集(语言)。A表示所有1个字符的字符串,AA,也写作A2,是所有两个字符字符串的集合。 A0是所有零长度字符串的集合,并且精确地A0 = {ε}。(它只包含一个字符串,即空字符串。)

  • A*是特殊符号,表示任意长度的字母表A上的所有字符串的集合。也就是说,A* = A0A1A2A3 ...。您可能会从正则表达式中认识到这个符号。

  • 对于长度使用绝对值符号。字符串s的长度为|s|。

因此,对于您的语句:

让s是n个字符的字符串。

您可以写成:

A是一组字符,sAn是一个长度为n的字符串。字符串s的长度为|s| = n


所以,如果我理解你的意思正确的话,当绝对值符号在字符串的上下文中使用时,它们代表字符串的长度? - Andreas Grech
1
+1 鼓励 OP 深入学习编程语言理论和美观的符号表示法。 - rajah9
啊哈,我想这就是我一直在寻找的答案……对我来说是非常棒的东西,让我有更多的研究。非常感谢John,希望我没有冒犯你或其他人 :) - Andreas Grech

0
数学上来说,只要len(s)是明确定义的,你已经很好地解释了fitness(s, n)
在计算机科学的文本中,一个字符串s在集合S上被定义为有限有序元素列表,并且它的长度通常被写作|s| - 但这只是符号表示,并不改变你对fitness的定义的(数学)含义,而你的定义已经非常清晰地表达出来了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接