Recursion 下一个最好的配料是什么?

Recursion 下一个最好的配料是什么?,recursion,Recursion,我正在建立一个程序,允许用户优化他们的杂货店购物,这样他们就可以用最少的原料制作出最多的食谱 这个程序的一个特点是我称之为“次佳成分”或NBI的函数。例如,如果你已经有了盐、油和迷迭香,什么NBI将解锁更多的食谱 假设答案是牛肉。如果你购买牛肉,你将能够创造出比购买任何其他配料更多的新食谱 买了牛肉之后,接下来最好的配料是什么?等等 该功能允许用户输入任意数量的起始成分(包括零)。所以有人可以从0、3甚至50种配料开始。他们接下来应该添加什么 我正在使用一个食谱数据库(总共约500个食谱)来编译

我正在建立一个程序,允许用户优化他们的杂货店购物,这样他们就可以用最少的原料制作出最多的食谱

这个程序的一个特点是我称之为“次佳成分”或NBI的函数。例如,如果你已经有了盐、油和迷迭香,什么NBI将解锁更多的食谱

假设答案是牛肉。如果你购买牛肉,你将能够创造出比购买任何其他配料更多的新食谱

买了牛肉之后,接下来最好的配料是什么?等等

该功能允许用户输入任意数量的起始成分(包括零)。所以有人可以从0、3甚至50种配料开始。他们接下来应该添加什么

我正在使用一个食谱数据库(总共约500个食谱)来编译结果

我可以规划出编写特定算法的各个步骤。但我需要帮助写一个更通用的算法

下面是一个特定的算法:

用户输入3种成分A、B和C

  • 分离所有使用A+B+C+空白的4种成分配方。注意空白频率最高。

  • 分离所有使用A+B+空白…A+C+空白…B+C+空白的三种成分配方。注意空白频率最高。

  • 分离使用A+空白…B+空白…C+空白的所有双成分配方。注意空白频率最高。

  • 隔离所有只使用空白配方的单成分配方。注意空白频率最高。

  • < P>计算总频率最高的空白。这是次好的配料

    但是我需要一种方法来编写一个更通用的算法,当用户输入N个成分时(从0个成分到100个成分)

    我可以用简单的英语写出规则——但我的程序员需要一种使用编码逻辑编写通用规则的方法

    这是用简单的英语写的

    当用户搜索N种成分(包括零)时,立即忽略任何需要N+2种或更多成分的配方。然后分离出所有剩余的使用全部、部分或全部不使用这些成分的配方,这样就有1个(并且只有1个)空槽用于“未搜索”成分。
    统计所有“未搜索”成分的频率。无论哪种“未搜索”成分出现频率最高,都会成为次优成分。

    目标是使此搜索功能准确(或与我的数据库一样准确)和快速。一些配料很容易。但是,当看10+成分时,它可能会慢一点

    有什么想法吗?

    你有一套配料,每个食谱都有一套配料。循环使用设定的差异,看看哪些差异正好包含一种成分

    一些伪代码:

    initialize counts
    
    for each recipe
      ingredients = set_difference(recipe_ingredients, my_ingredients)
      if length(ingredients) == 1
        increment counts[ingredient]
    
    maximum(counts) == next_best_ingredient
    

    获取
    下一个最佳成分(复数)更为棘手,因为可能有一个2和3成分,例如从上面生成的匹配比1和2的组合还要多。我不知道如何解决这个问题,但你可以重复前面的循环,对前10名左右的人说这是好的

    我不确定,这是否会导致最有效的实现,但我将尝试以下操作:
    -对于剩余的每个配方(最多含有N+1种不能烹饪的配料),将您的N种配料与该配方的配料结合起来。
    -如果结果集中的成分超过N+1,则丢弃该配方。否则,取新成分并增加其计数器变量,或为该成分添加新的计数器变量


    如果可以,您可能应该确保每个配方的配料表都按顺序存储在数据库中。这样,集合生成/多个不匹配的检测应该非常快。

    这是一个编程问题(我怀疑这已经得到了很好的研究)。它属于stackoverflow.se,我认为存储一些数据库索引会使它变得简单。请注意,下一个最好的成分加上下一个最好的成分不一定像一对不同的成分一样好,这两种成分不可能同时被推荐。为了把这个问题转化为数学,假设成分是整数,你想最大化它们产生的子集积的数量,但同时最小化整数的大小。谢谢大家。我把我的问题贴在数据库部分。干杯。你有什么想法吗?具体问题?这不是一个讨论论坛,也不是一个让你的工作为你自己完成的地方