任何人都可以给我一个关于如何从Codility处理以下任务的提示:https://codility.com/programmers/task/hilbert_maze/
我可以通过生成迷宫并使用BFS搜索最短路径来找到最短路径,但由于最坏情况下的时间复杂度预计为O(N)我不认为这会是正确的方法。 BFS的时间复杂度为O(| V | + | E])其中V是顶点数,E是边数。例如,如果N = 3,我们有一个大小为17x17的网格,直观显而易见的是我们只能在3个步骤中找到路径。
因此,指示的时间复杂度是错误的并且应该类似于M ^ 2,或者有一个快速的技巧来简单地计算两点之间的距离而不使用图算法。我找到了一些计算2个给定点的希尔伯特距离的算法(如果这是需要的),它使用位操作等但根本无法理解它们。此外,我认为该任务的目标是自己找出如何计算距离而不使用现有公式。
是否有人解决了这个任务并可以帮助我?谢谢!
答案 0 :(得分:2)
以下是我提出的解决方案:
此时我们将所有象限和方向都缩小到包含我们观点的最小迷宫。从后面(从最小的迷宫)我们需要解决它们。每个迷宫都可以通过以下规则解决:
存储这些移动,我们检查两个数组中是否有任何共同元素属于这两个点:
这个解决方案可以进行优化,只是为了展示和想法开始。
编辑:以下是我在Swift3中实现的上述解决方案:https://codility.com/demo/results/training9WWFXU-EWC/