这是一个很大的概念性问题,因此我没有任何代码可显示。我会尽力解释这一点。我正在编写一个程序,该程序应该查找在大型随机组合表中找到的常见数字序列。

因此,以以下数据为例:

1 5 3 9 6 3 8 8 3 3

6 7 5 5 5 4 9 2 0 1

6 4 4 3 7 8 3 9 5 6

2 4 2 4 5 5 3 4 7 7

1 5 6 3 4 9 9 3 3 2

0 2 7 9 4 5 3 9 8 3

这些是数字1-9的随机组合。对于发现的每3位数(或更多)序列,我需要将其放入另一个数据库中多次。因此,第一行包含“5 3 9”,第六行也包含“5 3 9”。我将把该序列与找到它的次数放到一个单独的表中。

我仍在研究实际进行这些比较的算法,但我想我必须从“1 5 3”开始,将其与找到的每个3数字三重奏进行比较,然后继续进行“5 3 9”,然后选择“3 9 6“等。

我现在的主要问题是,如果这些数字存储在数据库中,我不知道该怎么做。我的数据库表有11列。每个数字一栏,整个10位数序列一栏。列称为序列,1stNum,2ndNum,3rdNum ... 10thNum。

视觉:我的数据库中上面数据的第一行是这个:
|  1 5 3 9 6 3 8 8 3 3  |  1  |  5  |  3  |  9  |  6  |  3  |  8  |  8  |  3  |  3  |

(“|”分隔列)

如何使用Java有效地进行比较?我要遍历表中的每一行很多次。一次是为了比较初始序列,然后是那些序列中的每一个,我都要经过每一行。基本上是for循环中的for循环。听起来这将需要大量查询,并且如果表变得很大(可能会如此)可能会花费很多时间。

如果我使用查询遍历数据库或转储数据库并遍历文件,它的计算效率更高吗?

我试图尽我所能解释这对我来说是一个非常令人困惑的过程。我可以澄清您需要我做的任何事情。我仅需要有关最佳操作方法的指导。

最佳答案

假设您已检索列表中的序列,这就是我要做的:

List<String> sequences = Arrays.asList("1539638833","6755549201","6443783956","2424553477","1563499332","0279453983");
Map<String,Integer> count = new HashMap<>();
for (String seq : sequences) {
    int length = seq.length();
    for (int i=0 ; i<length - 2 ; i++) {
        String sub = seq.substring(i,i + 3);
        count.put(sub,count.containsKey(sub) ? count.get(sub) + 1 : 1);
    }
}
System.out.println(count);

Ouput:
{920=1, 783=1, 945=1, 332=1, 963=1, 644=1, 156=1, 983=1, 453=1, 153=1, 388=1, 534=1,
 455=1, 245=1, 539=2, 554=1, 242=1, 555=1, 553=1, 437=1, 883=1, 349=1, 755=1, 675=1,
 638=1, 395=1, 201=1, 956=1, 933=1, 499=1, 634=1, 839=1, 794=1, 027=1, 477=1, 833=1,
 347=1, 492=1, 378=1, 279=1, 993=1, 443=1, 396=1, 398=1, 549=1, 563=1, 424=1}

然后,您可以从地图将这些值存储在数据库中。

09-10 08:48
查看更多