Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 对于这个圆桌问题,我应该使用什么样的算法?_Algorithm_Math_Data Structures_Graph_Computer Science - Fatal编程技术网

Algorithm 对于这个圆桌问题,我应该使用什么样的算法?

Algorithm 对于这个圆桌问题,我应该使用什么样的算法?,algorithm,math,data-structures,graph,computer-science,Algorithm,Math,Data Structures,Graph,Computer Science,我的任务是根据N位客人对其他客人的喜欢/不喜欢程度,确定是否可以让他们坐在圆桌上。座位安排有两个要求: 所有的客人不应该坐在他们不喜欢的客人旁边 所有客人都应该坐在他们喜欢的客人旁边 输入: likeSet={guest_id:[其他来宾列表]}, dislikeSet={guest_id:[其他来宾列表]} 输出:布尔值 蛮力解决方案将从安排客人0开始,并检查所有可能的座位,但这肯定是低效的 这似乎是二分问题的一种变体,但我不确定从哪里开始 任何意见都将不胜感激 正如tym32167在评论中

我的任务是根据N位客人对其他客人的喜欢/不喜欢程度,确定是否可以让他们坐在圆桌上。座位安排有两个要求:

  • 所有的客人不应该坐在他们不喜欢的客人旁边
  • 所有客人都应该坐在他们喜欢的客人旁边
  • 输入: likeSet={guest_id:[其他来宾列表]}, dislikeSet={guest_id:[其他来宾列表]}

    输出:布尔值


    蛮力解决方案将从安排客人0开始,并检查所有可能的座位,但这肯定是低效的

    这似乎是二分问题的一种变体,但我不确定从哪里开始


    任何意见都将不胜感激

    正如tym32167在评论中指出的,该问题类似于哈密顿循环问题,这意味着它是NP难问题,不可能有多项式时间的解决方案

    关于削减:

    -假设我们手头的问题有一个有效的解决方案。我们将用它来解决HAM-CYCLE的一个实例,这是一个已建立的NP-hard问题

    -对于输入图G=(V,E),则对于每对顶点u,V:

  • 如果(u,v)在E中,你“喜欢”v
  • 否则,你不喜欢v
  • -然后我们使用有效的解决方案来计算布尔输出:这些客人能围坐在桌子周围吗?如果可以,我们知道客人的顺序是,每个元素“喜欢”相邻元素(与之相连),最后一个“喜欢”第一个(循环),每个客人最多坐一次(简单循环),每个客人至少坐一次


    -有了这些知识,我们可以在多项式时间内解决HAM循环问题,然后返回true或false。

    盲目猜测:1)构建(有向?)图,其中顶点-是guest,边-如果guest喜欢另一个。2) 求哈密顿量cycle@user3386109我认为这两个要求是互斥的,因为恩惠不一定是相互的。例如,如果客人A喜欢客人B,但客人B不喜欢客人A,他们不应该坐在一起。在没有要求1的情况下,结果将包括A和B相邻就座的情况。