<h2>算法</h2>
<p>拓扑排序确实是一种方法;根据您的要求,我不会编写完整的实现。你知道吗</p>
<h2>大纲和注释</h2>
<h3>类型</h3>
<p>首先,将<code>requiredInputs</code>代码存储为类,而不是字符串。这将使比较方式更加优雅:</p>
<pre><code>class Node1:
requiredInputs = []
class Node2:
requiredInputs = [Node1]
class Node3:
requiredInputs = [Node2]
class Node4:
requiredInputs = [Node3, Node2]
</code></pre>
<h3>输入和输出数据结构</h3>
<p>然后,您可以将节点放置在两个数组中,用于输入和输出。这可以就地完成(使用单个数组),但很少值得这么麻烦。你知道吗</p>
<pre><code>unordered_nodes = [Node4, Node3, Node2, Node1]
ordered_nodes = []
</code></pre>
<p>算法概要如下:</p>
<pre><code>while there are unordered_nodes:
for each node N in unordered_nodes:
if the requiredInputs of N are already in ordered_nodes:
add N to ordered_nodes
remove N from unordered_nodes
break
</code></pre>
<h3>预期结果</h3>
<p>实施时,应提供:</p>
<pre><code>print ordered_nodes
[<class __main__.Node1 at 0x10a7a8bb0>,
<class __main__.Node2 at 0x10a7a83f8>,
<class __main__.Node3 at 0x10a7a80b8>,
<class __main__.Node4 at 0x10a7a8600>]
</code></pre>
<h3>优化</h3>
<p>有很多方法可以优化或改进拓扑排序。和前面一样,我将在不透露任何实现的情况下给出一些提示。你知道吗</p>
<ul>
<li>按某些属性对输入数组进行预排序</li>
<li>使用单个数组进行就地排序</li>
<li>使用不同的数据结构来表示节点之间的关系</li>
<li>在任何迭代中向<code>ordered_nodes</code>添加多个节点</li>
</ul>