Algorithm 用于规划从依赖项创建对象的算法
我是炼金术士。我可以根据我的食谱用其他东西做东西。例如:Algorithm 用于规划从依赖项创建对象的算法,algorithm,Algorithm,我是炼金术士。我可以根据我的食谱用其他东西做东西。例如: 2 lead + 1 bismuth -> 1 carbon 1 oxygen + 5 hydrogen + 3 nitrogen -> 2 carbon 5 carbon + 5 titanium -> 1 gold ...etc. 我的食谱书包含数千份食谱,每一份都消耗一个或多个输入的离散量,并产生一个输出的离散量。作为一个懒惰的炼金术士,我不想记住我所有的食谱。我想写一个计算机程序来解决这个问题。该程序的
2 lead + 1 bismuth -> 1 carbon
1 oxygen + 5 hydrogen + 3 nitrogen -> 2 carbon
5 carbon + 5 titanium -> 1 gold
...etc.
我的食谱书包含数千份食谱,每一份都消耗一个或多个输入的离散量,并产生一个输出的离散量。作为一个懒惰的炼金术士,我不想记住我所有的食谱。我想写一个计算机程序来解决这个问题。该程序的输入是对我想要的东西的描述,如“2金”,以及对我库存的描述,如“5钛、6铅、3铋、2碳、1金”。输出应该是“无法生成”或一系列用于创建对象的指令。对于这里给出的示例,输出可以是:
make 2 carbon out of 4 lead + 2 bismuth
make 1 gold out of 4 carbon + 4 titanium
然后,再加上我已经拥有的1枚金牌,我得到了我想要的2枚金牌
最后一点注意:配方是加权的;e、 如果可以的话,我更喜欢用铅和铋做碳
有没有一种优雅的方法来描述和解决这个问题?一个简单的递归解决方案看起来很诱人,但我可以想到一些配方集,它们会使它做指数级的工作
(作为后续行动,有一天我的研究可能会发现一套循环的配方——也许我可以用一个氦制造一个氢,用一个氢制造一个氦——我也希望能够处理这个问题。)这个问题是NP难的 给出CNF-SAT的一个实例,准备炼金术表,其中包含用于测试的试剂
该问题与向量加法系统/Petri网的可达性判定问题有关;我的约简部分基于文献中出现的约简。拓扑排序是答案。我对此进行了一点思考,但不知道如何处理可能有多个配方的事实。(不清楚的不是拓扑排序,而是如何使用拓扑排序的一组东西来解决问题。)我不得不在纸上把它计算出来,以说服自己你是正确的,但现在我很确定你是正确的。很好的折扣。:)我还要感谢你提到Petri网——我从未听说过它们,它们看起来正是我想要的泛化。