Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 是否可以创建生成自动图像的算法?_Algorithm_Language Agnostic_Computability - Fatal编程技术网

Algorithm 是否可以创建生成自动图像的算法?

Algorithm 是否可以创建生成自动图像的算法?,algorithm,language-agnostic,computability,Algorithm,Language Agnostic,Computability,一个句子描述它包含的字符,通常列举字母表中的每个字母,也可能列举它包含的标点符号。以下是wiki页面中给出的示例 这句话用了两个a、两个c、两个d、二十八个e、五个f、三个g、八个h、十一个i、三个l、两个m、十三个n、九个o、两个p、五个r、二十五个t、六个v、十个w、两个x、五个y和一个z 想出一个是很难的,因为你不知道它包含多少字母,直到你完成这个句子。这就是促使我问的问题:是否有可能编写一个算法来创建自动图像?例如,给定参数将是句子的开头作为输入,例如,“此句子使用”,并假设它使用与上述

一个句子描述它包含的字符,通常列举字母表中的每个字母,也可能列举它包含的标点符号。以下是wiki页面中给出的示例

这句话用了两个a、两个c、两个d、二十八个e、五个f、三个g、八个h、十一个i、三个l、两个m、十三个n、九个o、两个p、五个r、二十五个t、六个v、十个w、两个x、五个y和一个z

想出一个是很难的,因为你不知道它包含多少字母,直到你完成这个句子。这就是促使我问的问题:是否有可能编写一个算法来创建自动图像?例如,给定参数将是句子的开头作为输入,例如,
“此句子使用”
,并假设它使用与上述
“xa,…yz”
相同的格式


我并不是要你写一个算法,尽管我很想知道你是否知道有一个算法存在,或者想尝试写一个;相反,我很好奇这个问题一开始是否可以计算。

让我们假设所有计数都小于或等于某个最大值m,m<100。正如OP的链接中提到的,这意味着我们只需要确定这些数字单词中出现的16个字母的计数,因为其他10个字母的计数已经由指定的前缀文本确定,并且不能更改

我认为值得利用的一个特性是,如果我们采用一些(可能不正确的)解决方案并重新排列其中的数字单词,那么字母总数不会改变。因此,如果我们忽略了“命名自己”所花费的字母(例如
two c
中的
c
),那么字母总数只取决于句子中实际存在的多组数字单词。这意味着,我们不必考虑将M个数字字分配给16个字母中的每一个的所有可能的方法,我们可以枚举大小为16或更小的所有多个字组的(更小)集合,它们具有从m个数字的地面集取来的元素,并且对于每一个多集,看看我们是否可以将16个字母以一种只使用每个multiset元素一次的方式匹配到它的元素中

请注意,多组数字可以唯一地表示为非减量数字列表,这使得它们易于枚举

一个字母“适合”一个多重集合意味着什么?假设我们有一组多个数字;这决定了16个字母中每个字母的总计数(对于每个字母,只要将W中所有数字单词中该字母的计数相加即可;对于每个数字单词,除了“1”之外,还要为字母“S”加上1的计数,以说明多元化)。调用这些字母计数f[“A”]表示“A”的频率,等等。假设我们有一个函数etoi(),它的操作方式与C的atoi()类似,但返回一个数字字的数值。(这只是概念性的;当然,在实践中,我们总是从整数值生成数字单词(我们将保持不变),而不是相反的方式。)然后字母x适合w中的特定数字单词w,当且仅当f[x]+1=etoi(w),因为将字母x本身写入句子会增加其频率1,从而使方程的两边相等

这还不能解决这样一个事实,即如果一个数字单词包含多个字母,则只能为其中一个字母赋值。但事实证明,很容易确定一组给定的多组数字字(表示为不减损的整数列表)是否同时适合任何一组字母:

  • 计算W表示的字母频率f[]的总数
  • 对这些频率进行排序
  • 跳过任何零频率字母。假设有k个这样的
  • 对于每个剩余字母,检查其频率是否小于相应位置数字字的数值一。即检查f[k]+1==etoi(W[0])、f[k+1]+1==etoi(W[1])等
  • 如果且只有所有这些频率一致,我们才有赢家

上述方法很幼稚,因为它假设我们从一个大小为M的地面集合中选择要放入多集合的单词。对于M>20,这个集合中有很多结构可以利用,但代价是算法稍微复杂化。特别是,与其枚举所有允许数的这个地面集的直多集,不如枚举{“一”、“二”、“十九”、“二十”、“三十”、“四十”、“五十”、“六十”、“七十”、“八十”、“九十”)的多集,然后允许“拟合检测”步骤将10的倍数的数字字与一位数的数字字组合起来。

您正在问两个不同的问题

"is it possible to write an algorithm which could create an autogram?"
有一些算法可以找到自动图像。据我所知,他们使用随机化,这意味着这样的算法可能会为给定的起始文本找到解决方案,但如果它没有找到,那么这并不意味着没有。这就引出了第二个问题

"I'm curious as to whether the problem is computable in the first place."

可计算意味着有一种算法,对于给定的开始文本,该算法要么输出一个解决方案,要么声明没有解决方案。上述算法不能做到这一点,穷举搜索也不可行。因此我认为这个问题是不可计算的。然而,这是相当学术兴趣。在实践中,随机算法工作得很好。

我认为它不行。我不是要求人们编写算法,正如我在OP中指定的那样,我是在问这是否可能。这不是一个挑战,而是一个普遍可计算性的问题。@NiklasB。长度有一个上限。@n.m.我读了你的参考资料后才意识到。我想一个人可以成为职业选手