【发布时间】:2014-11-07 20:45:44
【问题描述】:
这是一个很大程度上是概念性的问题,所以我没有任何代码要显示。我会尽力解释这一点。我正在编写一个程序,该程序应该找到在随机组合的大表中找到的常见数字序列。
所以以这个数据为例:
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”,第 6 行也包含“5 3 9”。我会将该序列放在一个单独的表中,并附上它被找到的次数。
我仍在研究实际进行这些比较的算法,但我认为我必须从“1 5 3”开始,将其与找到的每个 3 数字三重奏进行比较,然后继续进行“5 3 9” " 然后 "3 9 6" 等等......
我现在的主要问题是,如果这些数字存储在数据库中,我不知道该怎么做。我的数据库表有 11 列。每个单独的数字一列,整个 10 位序列的一列。列称为 Sequence、1stNum、2ndNum、3rdNum...10thNum。
Visual:我的数据库中上述数据的第一行是这样的:
| 1 5 3 9 6 3 8 8 3 3 | 1 | 5 | 3 | 9 | 6 | 3 | 8 | 8 | 3 | 3 |
("|" 分列)
如何有效地使用 Java 进行比较?我多次迭代表中的每一行。对于要比较的初始序列一次,对于这些序列中的每一个,我都会遍历每一行。基本上是for循环中的for循环。这听起来像是要进行大量查询,并且如果表变得很大(它会),则可能需要很长时间。
如果我使用查询遍历数据库,或者我转储数据库并遍历文件,计算效率会更高吗?
我试图尽可能地解释这一点,这对我来说是一个非常混乱的过程。我可以澄清任何你需要我做的事情。我只需要有关最佳行动方案的指导。
【问题讨论】:
-
为什么你要这样做?难道你不能将全部内容读入一个List并在内存中排序吗?
-
它是我正在玩的个人编程项目的一部分。细节非常混乱,但我试图通过将其设置为一个独立的问题来解释。不过,我根本没有对其进行排序。
-
@ElliottFrisch 数字的顺序很重要,因此排序会破坏目的。如果这就是你的意思。
-
I'm still working out the algorithm for actually making these comparisons but i figure i'll have to start with "1 5 3", compare that to every single 3 number trio found, then move on to "5 3 9" then "3 9 6" etc....不要认为这是个好主意。我宁愿使用 HashSet 来存储每个遇到的三元组。每次发生碰撞时,我都会在 Map中增加这个三元组的计数器。这样,我认为您会节省大量时间,因为与其他所有三元组相比,插入 HashSet 的成本更低。 -
比较值的行为有什么作用?你想要最小或最大的序列吗?将其映射到
Comparable3 字段 POJO?