Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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 如何有效地为一场8球比赛准备台球?_Algorithm_Optimization_Language Agnostic - Fatal编程技术网

Algorithm 如何有效地为一场8球比赛准备台球?

Algorithm 如何有效地为一场8球比赛准备台球?,algorithm,optimization,language-agnostic,Algorithm,Optimization,Language Agnostic,由于8球游戏中的台球摆架可以在多种规则下进行,因此我指的摆架是: i、 e.8球必须位于中心,沿侧面条纹和实体必须交替。剩下的两个球(条纹球和实心球)无关紧要 假设你刚刚完成一场比赛,收集球,把它们放在架子上,然后继续安排它们开始一场新的比赛。它们现在是随机排列的。你如何进行 免责声明:绘画艺术如下 一个简单的方法是按顺序开始,顶部->底部和左侧->右侧 例如,我们假设1位于正确的位置5不是,我们用2交换它,然后用3交换4(或者用8),但这已经是低效的,因为我们要么把4移到中心,要么把8移到

由于8球游戏中的台球摆架可以在多种规则下进行,因此我指的摆架是:

i、 e.8球必须位于中心,沿侧面条纹和实体必须交替。剩下的两个球(条纹球和实心球)无关紧要

假设你刚刚完成一场比赛,收集球,把它们放在架子上,然后继续安排它们开始一场新的比赛。它们现在是随机排列的。你如何进行

免责声明:绘画艺术如下

一个简单的方法是按顺序开始,顶部->底部和左侧->右侧

例如,我们假设
1
位于正确的位置<代码>5不是,我们用
2
交换它,然后用
3
交换
4
(或者用
8
),但这已经是低效的,因为我们要么把
4
移到中心,要么把
8
移到
4
的位置,也就是说,它不必在最后的位置

还有一个决定,我们想在角落里打出哪种类型的球。你是如何预先决定的?你应该考虑有多少球已经到位了吗?在我的例子中,如果你想让灰色的球出现在角落里,你已经有了3个球(球1,10,14)。如果你想把白色的放在角落里,你只有两个(2,11)。这有关系吗

为了使这一点正式化,我们可以假设我们可以执行两个或三个操作:

  • 交换两个相邻的球
  • 交换两个不相邻的球
  • 旋转机架
因为我们可以使用双手,让我们假设我们可以并行第一个操作(同时交换两个球),而我们一次只能交换两个不相邻的球

哪种方法最适合此任务,以最小化时间(以所述时间单位表示)?贪婪是最好的选择吗?(我想这是我把它们装起来时的做法)


编辑:根据现有的(或以前的答案)-你可能会假设在角落里有比实体更多的条纹,这意味着跨步会更喜欢角落-不是说这不是真的,但是如果你做出这样的假设,请证明它。

注意!这个答案写在轮换要求之前。请谨慎行事:)

这是我对这个问题的初步看法

要做的第一件事是计算外部奇偶性-+1,如果它适合“角中的条纹”,如果它适合“角中的实体”,则为-1,如果它是8球,则为+0。这给了我们一个从+12到-12的范围,我们的目标是接近极限。(如果为+0,则选择+12或随机选择)

例如,这是+1+1+1-1-1+1-1-1-1+1+0-1,因此它是-1个倾斜的角点实体:

x o x x o
 x o x o
  8 x o
   o x
    o
8 o o o x
 o o o x
  o x x
   x x
    x
x x o o x
 o o x o
  o o 8
   x x
    x
下一步要做的是把8号球移到中心。如果你可以用它做两个相邻的交换,将两个球移动到位,而不是一个相邻的交换,只将一个球移动到位(或者一个非相邻的交换,如果球在一个角),那么就这样做

当我们移动8个球时,两个相邻的掉头共享球的所有组合可以由非相邻的交换产生相同的,所以我们必须同时考虑到更少的复杂性。 按此优先级排列所有剩余移动:

-外线两个相邻球之间的交换“值4”(如果这是我们最后一次交换,则为2)

-两个相邻球之间的交换,一个在外边,值2(如果这是我们的最后一次交换,则值1)

-外线两个球之间的交换“值2”

-两个球之间的交换,一个在外边,值1

并从上到下执行

因此,我们移动O在顶部,左边(4),右边的O在(2),左上的O在(2),然后交换X顶部与O在中间(2)。我们最终在一个2-2-1系列中进行了五次交换,所以进行了三次交易

o x o x o
 x 8 x x
  o o o
   x x
    o
(值得注意的是,如果我们瞄准拐角处的条纹,这个问题也会很快解决。)

我认为要求4圈是不可能的,但我还没有向自己证明这一点

另一个成功的例子是:

这具有+1的奇偶性,因此我们的目标是在拐角处使用条纹:

x o x x o
 x o x o
  8 x o
   o x
    o
8 o o o x
 o o o x
  o x x
   x x
    x
x x o o x
 o o x o
  o o 8
   x x
    x
将8个球与中心x互换 (1-)

交换两个相邻的外部,4点 (1-1)

将相邻边交换到中心,2个点 (1-2-)

边对边交换,2点 (1-2-1-)

3个动作

编辑:这对开篇文章中的示例非常有效,分两步解决:

这具有+1的奇偶性,因此我们的目标是在拐角处使用条纹:

x o x x o
 x o x o
  8 x o
   o x
    o
8 o o o x
 o o o x
  o x x
   x x
    x
x x o o x
 o o x o
  o o 8
   x x
    x
将8与边上的x交换,然后与中心的o交换(求解两条边) (2-)

交换左上下相邻的o和x(解决四条边) (2-2-)


两步。

你有两个八球,骗子

在给定的示例中,解决方案采取了两个步骤:

2-5,3-8
3-4,11-12

通过为(DP)配置问题,可以找到最佳解决方案。由于该问题是多阶段的,具有固定成本且无不确定性,因此将存在一个DP矩阵来最优地解决该问题

创建矩阵:请注意,考虑到对称性,8球可以位于9个位置之一。固体可按约(14-7)/2=1716种不同方式排列。这意味着机架配置的总数约为1716*9=15444。因此,您有15444个不同的可能状态。计算从任何一个州到任何其他州的成本。这就产生了一个包含15444*15444个细胞的矩阵,或者说是大约25亿个细胞。识别所有终端状态单元。要求解矩阵,您需要从开始状态向前搜索,直到到达结束状态(或直到达到总成本大于当前最小成本)。通过这样做,您将可以证明找到所有成本最低的路径

请注意,上述解决方案有些幼稚,可以通过各种方式进行优化,以生成更小的矩阵。例如,可以使用旋转对称减少单元数并添加
x x o o x
 o o x o
  o 8 x
   x o
    x
x o x o x
 o o x o
  x 8 x
   o o
    x
Pseudocode:

Create DP Matrix:

(1) determine number of possible arrangements, A, of balls
(2) for each arrangement, make a list of possible unique moves  
---- the possible moves are:  
------- rotating right  
------- rotating left  
------- exchanging any pair of balls  
------- exchanging any two pairs of adjacent balls  
(3) for each move in A store a pointer to the resulting arrangement  
(4) for each arrangment make an attribute indicating whether it is an end state  

Solve Problem  
(5) goto arrangement for starting position S  
(6) set best-cost-so-far (BCSF) variable to infinity
(6) breadth search from S, accumulating current cost CC as +1 for each transition
(7) if you reach an end state CC < BCSF, then set BCSF = CC and make solution list contain only the current path
(8) if you reach an end state CC = BCSF, then add path to solution list
(9) if CC > BCSF abandon branch and try next branch

The result will be a list of all possible solutions and the minimum cost BCSF.
    x            8
   x x          o o
  o o x        o o x
 o o x x      o x x x
8 o o o x    o x x o x
    x
   o o
  x o x
 x 8 o x
x o o x o
IF count is 3 {
    #inside triangle will choose 
    IF inside triangle has 2 of a kind, that type stays (in the red spots)
    ELSE pick random
}
swap 8 with 3  #move1
count[stripe]=3 [6,13,9]  
count[solid]=3 [5,4,12]
highest count=3, checking inside, inside is correct, random pick: stripes stay
Pick 5, corners() correct, swap with middles(2)  #move2
Pick 4, corners() correct, swap with middles(11)  #move3
Pick 12, corners() correct, swap with middles(3)  #move4
Done.
Pick 6, swap with corners(10)  #move2
Pick 13, swap with corners(1)  #move3
Pick 9, swap with corners(14)  #move4
Done.
swap 8 with 3  #move1
count[stripe]=3 [6,13,9]  
count[solid]=3 [5,4,12]
highest count=3, checking inside, inside has 2 of a kind(stripes) => stripes stay
Pick 5, corners() correct, swap with middles(2)  #move2
Pick 4, corners() correct, swap with middles(11)  #move3
Pick 12, corners() correct, swap with middles(15)  #move4
Done.
      6-9,14-15     2-12       2-5,4-7       1-2
    x           x           x           x           o
   x x         x x         8 x         o x         x x
  x o x   =>  x o o   =>  x o o   =>  o 8 o   =>  o 8 o
 o o o x     o o x x     o o x x     x o x x     x o x x
o 8 o o x   o 8 o x o   o x o x o   o x o x o   o x o x o
         5-11     12-13,14-15    4-7,6-10
    x            x            x            x
   o o          o o          o o          o o
  o x o   =>   o 8 o   =>   o 8 o   =>   x 8 x
 x o x x      x o x x      x o x x      o o x o
8 x o x o    x x o x o    x o x o x    x o x o x
         3-11       1-2,3-5
    x            x            o
   o o          o 8          x x
  o x o   =>   o x o   =>   o 8 o
 x o x x      x o x x      x o x x
8 x o x o    o x o x o    o x o x o
        11-2         12-5        13-3       9-10
    x           x           x           x           x
   x x         o x         o x         o o         o o
  x o x   =>  x o x   =>  x 8 x   =>  x 8 x   =>  x 8 x
 o o o x     o o o x     o o o x     o o o x     o o x o
o 8 o o x   x 8 o o x   x o o o x   x o x o x   x o x o x