如何在数学上形式化这种类型的数组搜索

时间:2017-11-05 14:42:35

标签: arrays math search

我想搜索一个数组,其中包含您在图片中可以看到的模式。我们从一个给定的点(x,y)开始,用红色标记并继续,如图所示:

enter image description here

到目前为止,我的方法是使用一个看起来像这样的自制列表(例如在python代码中):

<div id="result"></div>

但显然这不是一个非常智能的解决方案,而且它不可扩展,所以我必须知道我的数组的大小。 有没有人知道这种搜索背后是否有数学算法?

1 个答案:

答案 0 :(得分:0)

不确定这实际上是否是您正在寻找的,但肯定有一种动态生成此列表的算法,因为您知道运行时 bidimensional 数组的大小。

这是Java中的快速草图(我使用Point作为整数对的包装器,只要其equalshashCode具有指向两个成员的明显实现,您就可以使用另一个类)

    int max = 5; // replace with the actual size of your matrix
    for (int i = 0; i <= max; i++) {
        // I use a set to skip ugly checks for duplicates in first iterations
        Set<Point2D> coll = new HashSet<>();

        // first loop takes care of the sides of your squares (even numbers in your image)
        for (int x = -i + 1; x < i; x++) {
            coll.add(new Point(i, x));
            coll.add(new Point(-i, x));
            coll.add(new Point(x, i));
            coll.add(new Point(x, -i));
        }
        System.out.println("STEP = " + (2 * i));
        System.out.println((coll));

        // second loop takes care of the vertices of your squares (odd numbers in your image)
        coll = new HashSet<>();
        coll.add(new Point(i, i));
        coll.add(new Point(-i, i));
        coll.add(new Point(i, -i));
        coll.add(new Point(-i, -i));
        System.out.println("STEP = " + (2 * i + 1));
        System.out.println((coll));
    }

该代码段只是在控制台中打印点集合,您可以将它们添加到列表中或直接使用它们。