无序矩阵搜索算法

unsorted matrix search algorithm

本文关键字:搜索算法 无序      更新时间:2023-10-16

是否存在一种合适的算法,允许程序在无序矩阵中搜索其中最大的素数。矩阵的大小为m*n,可以填充其他素数和非素数。搜索必须找到最大的素数。

我已经学习了分治算法,二叉树和逐步搜索,但所有这些都处理排序矩阵。

首先,无论你是使用m * n矩阵还是m * n元素的向量都没关系。一般来说,您必须访问每个矩阵元素至少一次,因为它没有排序。有一些提示可以使过程更快。

  1. 如果它是一个大矩阵,你应该一行一行地访问元素(而不是一列一列),因为矩阵是以这种方式存储在内存中的,所以来自同一行的元素很可能在缓存中,一旦你访问其中一个

  2. 测试数的素数是你任务中最昂贵的部分,所以如果矩阵中的数不是太大,你可以使用Eratosthenes的筛选算法来提前查找素数。https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

  3. 如果你不使用埃拉托色尼的筛,也许在算法之前对你的数字进行排序是有益的,这样你就可以从最大到最小地测试数字。在这种情况下,一旦找到第一个素数,算法就会停止。如果你不排序,你将不得不测试所有数字,这可能是最慢的方法。

你可以这样做:

for (int i = 0; i < m; m++)
{
    for (int j = 0; j < n; j++)
    {
       if ((array[i][j] == *a prime number*) 
           && (array[i][j] > biggestPrime))
       {
           biggestPrime = array[i][j];
       }
    }
}