Algorithm 测量流算法
我必须编写一个工具,允许业务用户创建调查。 只有在填写调查的人以特定方式回答了前面的问题时,才应询问一些问题。但是,无论选择的答案是什么,都应该显示一些问题 到目前为止,我提出了一个图形结构,下面是一个理论上的例子: (我只有图论的基本知识,所以请原谅我选择的单词可能不够准确) 像A、B、C这样的轮代表问题,链接上的值代表访问问题的先决条件 NULL表示没有前提条件,而“0”或“1”等值表示前一个问题必须有一个值为“0”或“1”的答案才能显示该问题 具体例子: 我在A轮。我有两个可能的答案。第一个值为“0”。第二个值为“1”。如果我选择值为“0”的答案,那么我将转到问题B 我现在在B轮。无论答案是什么,我都会进入E轮,因为没有先决条件 E是一个叶节点,所以我回到B。B有另一个子节点F,没有先决条件,所以我转到问题F。让我们在这里结束流程 我也可以问一个有多个前提的问题。这由问题N表示。只有在问题F的答案为“5”且问题I的答案为“DE”时,才能访问该问题。在这种情况下,在回答问题F后,由于在此状态下只有一个前提条件有效,因此我们将返回到图中,只有在回答问题I的“DE”后,我们才能转到问题N 我的问题是关于用于此类调查的算法。是否存在覆盖此用例的现有算法?我认为这看起来像DFS图遍历,但条件使我怀疑 还有,我是否把事情过度复杂化了,这能更简单地表达出来? 在这个阶段我真的很想得到一些建议Algorithm 测量流算法,algorithm,survey,Algorithm,Survey,我必须编写一个工具,允许业务用户创建调查。 只有在填写调查的人以特定方式回答了前面的问题时,才应询问一些问题。但是,无论选择的答案是什么,都应该显示一些问题 到目前为止,我提出了一个图形结构,下面是一个理论上的例子: (我只有图论的基本知识,所以请原谅我选择的单词可能不够准确) 像A、B、C这样的轮代表问题,链接上的值代表访问问题的先决条件 NULL表示没有前提条件,而“0”或“1”等值表示前一个问题必须有一个值为“0”或“1”的答案才能显示该问题 具体例子: 我在A轮。我有两个可能的答案。第
谢谢你的帮助 以下是我对如何解决您的问题的总体看法 根据您提供的图表,我假设对于每个问题(节点),您可以针对给定的答案判断哪些问题(节点)可能被解锁。我所说的“可能解锁”是指他们实际上解锁了,或者你刚刚满足解锁问题的条件之一 另一方面,您可以为每个问题存储解锁所需满足的条件数(让我们将其命名为计数器)。然后,每当你得到一个答案时,你检查可能被这个答案解锁的问题列表,并减少它们的计数器 当任何计数器减为零时,您将未锁定的问题添加到队列或堆栈中(您可以选择是选择FIFO顺序还是LIFO顺序)。当然,您可以从包含无条件问题的队列开始(在您的案例中只有“A”)
使用FIFO(队列),您将获得类似BFS的遍历图的顺序。使用后进先出(stack),您将获得类似DFS的订单。只要您方便。根据您的描述,我会将您提出的图形概念稍微更改为以下内容:
- 使其成为一个有向图(即,每个弧都有一个源和一个目标的图)
- 每个问题有一个节点,每个答案有一个节点(每个问题的每个答案都是不同的节点)。每个问题节点需要有一个标志来确定它是“问题类型”还是“答案类型”,以及一个标志来标记它是否已被访问
- 每个问题节点将连接到其每个答案(方向[question]->[Answer])
- 每个答案前提条件(“要达到问题B,您需要回答问题A中的0”)将由一个答案(节点[问题A的答案0])到它“解锁”的问题(节点[问题B])的弧表示。如果一个问题需要多个答案,它将有多个输入弧
- 每个问题的前提条件(“要达到问题D,您需要回答问题A,无论选择如何”)将由一个问题(节点[问题A])到另一个问题(节点[问题D])的弧表示