我花了很长时间寻找this problem的解决方案。我绘制了大量的交叉阴影三角形,在简单的情况下计算三角形,并搜索某种模式。不幸的是,我碰到了墙。我很确定我的编程/数学技能不符合这个问题的先决条件。
所以我在网上找到了一个解决方案,以便访问论坛。我根本不了解大多数方法,有些看起来太复杂了。
有谁能让我理解这个问题?其中一种方法可在此处找到:http://www.math.uni-bielefeld.de/~sillke/SEQUENCES/grid-triangles(问题C) 允许使用单个功能。
他们是如何提出这个解决方案的?在这一点上,我真的只想了解这个有趣问题背后的一些概念。我知道查找解决方案不是欧拉精神的一部分,但我很确定无论如何我都不会解决这个问题。
答案 0 :(得分:3)
这在枚举组合学中基本上是一个问题,它是计算事物组合的艺术。这是一个美丽的主题,但可能需要一些热身才能欣赏你给出的参考中的忍者技巧。
另一方面,问题的解决方案主题中的注释表明许多人已经使用强力方法解决了问题。最常见的技巧之一是在图中采用三条线的所有可能组合,并查看它们是否产生最大三角形内的三角形。
您可以通过注意线条位于六个方向之一来显着减少搜索空间。由于包含两条平行线的线组合不会产生三角形,因此您可以迭代线三元组,以便三元组中的每条线具有不同的方向。
给定三条线,计算它们的交点。你将有三种可能性 1)线是重合的 - 它们都在一个公共点相交 2)两条线在三角形外的一点处相交 3)所有三个交点都是不同的,它们都位于外三角区内
只需计算满足条件(3)的组合,就完成了。你必须测试的线组合数是O(n 3 ),这不是禁止的。
EDIT1:重读你的问题,我得到的印象是你可能对获得组合解决方案/公式的解释比对蛮力方法的概述更感兴趣。如果是这样的话,请这样说,我会删除这个答案。但我也要说那个案子的问题不适合这个网站。
EDIT2:另见a combinatorics solution by Bill Daly and others。它在数学上比另一个更温和。
答案 1 :(得分:0)
我没有为project euler解决这个问题,而且我还没有提出你提供的问题和解决方案。在单一功能的情况下,所提出的方法最终是简单的模式发现。解算器根据交叉点中存在的三角形类型将提出的问题分为三个部分。对于这类问题,这是一个相当标准的方法,将较大的模式分解为较小的模式以使解决更容易。用于表达各种形式的三角形的函数我只能假设是用非常尖锐的模式发现思想或某些数论/几何形成的。它也超出了我的解释范围和我的知识范围。这个问题与编程无关。它基本上完全是数学。如果您通读了自己喜欢的网站,就可以看到解决问题的逻辑。