Algorithm 为给定的输入和输出创建函数

Algorithm 为给定的输入和输出创建函数,algorithm,function,Algorithm,Function,想象一下,有两组大小相同的数字 是否可能,以及如何创建一个函数,一个算法或子例程来精确地将输入项映射到输出项?比如: Input = 1, 2, 3, 4 Output = 2, 3, 4, 5 其功能是: f(x): return x + 1 “函数”是指比[1]更复杂的东西: f(x): if x == 1: return 2 if x == 2: return 3 if x == 3: return 4 if x == 4: return 5 这对于创

想象一下,有两组大小相同的数字

是否可能,以及如何创建一个函数,一个算法或子例程来精确地将输入项映射到输出项?比如:

Input = 1, 2, 3, 4
Output = 2, 3, 4, 5
其功能是:

f(x): return x + 1
“函数”是指比[1]更复杂的东西:

f(x):
    if x == 1: return 2
    if x == 2: return 3
    if x == 3: return 4
    if x == 4: return 5
这对于创建特殊的哈希函数或函数近似非常有用


更新:


我想问的是,是否有一种方法可以压缩上面[1]中那个微不足道的映射示例。

在我看来,您需要一个。这些函数基于散列函数,并且已知的散列函数比其他函数工作得更好,这取决于预期的输入和预期的输出

如果您想要的是一种将任意输入映射到任意输出的算法方法,那么这在一般情况下是不可行的,因为它完全取决于输入和输出集


例如,在这里的简单示例中,函数非常明显,
f(x):x+1
。在其他情况下,生成描述映射的精确函数可能非常困难,甚至不可能,您必须近似或直接使用映射。

好的,我不理解您的问题,但我要试一试

如果你只有两组数字,并且你想找到f,其中y=f(x),那么你可以试着给你一个近似的“地图”

在这种情况下,它是线性的,所以曲线拟合可以工作。您可以尝试不同的模型,看看哪种模型效果最好,并根据最小化错误度量进行选择

这就是你的想法吗

下面是该文章的另一个链接和图片:


在某些情况下(例如您的示例),或类似的统计模型可能会发现您的输入集和输出集之间的关系。

在一般情况下这样做是非常困难的。例如,考虑ECB模式中使用的分组密码:它将输入整数映射为输出整数,但根据设计,从特定实例导出任何一般映射是不可行的。事实上,对于一个好的密码,即使有输入和输出块之间的完整映射集,您仍然无法确定如何在一般基础上计算该映射


显然,密码是一个极端的例子,但它可以用来说明没有(已知的)通用程序来执行您的请求。

找到输出某些字符串(序列、函数等)的最短程序相当于找到其,这是不可判定的

如果“不可能”不是一个令人满意的答案,你必须限制你的问题。在所有适当限制的情况下(多项式、有理函数、线性递归),只要您了解自己在做什么,就很容易找到最佳算法。示例:

  • 多项式

  • 有理函数-

  • 布尔公式-

  • 近似解,线性情况:

  • 数据的一般打包;有些技术,如游程编码,是无损的,有些则不是

在多项式序列的情况下,通常有助于考虑序列BN=AN+1-AN;这将二次关系简化为线性关系,将线性关系简化为常数序列等,但并没有灵丹妙药。您可以使用遗传算法、随机猜测、检查许多内置序列及其组成等来构建一些启发式方法(例如Mathematica has-检查该页面以了解其复杂性)。不管怎样,由于科尔莫戈罗夫复杂性的不确定性,任何这样的程序在理论上都离完美有无限的距离。在实践中,您可能会得到令人满意的结果,但这需要大量的人工年

另见。您还可以在应用程序中实现一些包装器

字段:

大多数情况下,可以做的事情的限制在

  • 复杂性理论——描述什么问题可以“快速”解决,比如在图中找到最短路径,什么问题不能解决,比如玩广义版的跳棋(它们是一次性完成的)

  • 信息论——描述随机变量携带了多少“信息”。例如,以抛硬币为例。通常,对结果进行编码需要1位,对n个结果进行编码需要n位(使用长0-1序列)。假设现在你有一个有偏差的硬币,90%的时间都是尾巴。然后,有可能找到另一种描述n个结果的方法,这些结果平均给出的序列要短得多。调用最佳编码所需的每次抛出的位数(在这种情况下小于1!);显示携带的信息量(1/2-1/2为1位,偏置硬币小于1位,如果硬币始终落在同一侧,则为0位)

  • 算法信息理论——试图将复杂性理论和信息理论结合起来。科尔莫戈罗夫的复杂性就属于这里。如果它具有大的Kolmogorov复杂性,则可以考虑字符串“随机”:AAAAAAAAAAAA不是随机字符串,F8A34 OLX可能是。所以,随机字符串是不可压缩的(这是一个非常可读的介绍)。Chaitin的书可以下载。引用:“[…]我们构造了一个只涉及整数和加法、乘法和幂运算的方程,其性质是,如果改变一个参数,并询问解的数量是有限的还是无限的,那么这个问题的答案就无法与公平硬币的独立抛投结果区分开来。”(换句话说,没有算法能够以大于1/2的概率猜出结果)。然而,我还没有读过那本书,所以不能给它打分

与信息论密切相关的是描述纠错码的编码理论。示例结果:可以将4位编码为7位,这样就可以检测和纠正任何单个错误,或检测两个错误()

“积极”方面是: