我需要一个数据存储类型和算法来跟踪我看到的最后n个项目的状态。每个项目都有通过或失败的状态,但是如果一行中有m个项目失败,我正在监视的系统将被视为失败。一旦系统被认为失败了,我就需要浏览数据的历史记录,找到宽度W的最后一个窗口,其中所有项目都处于“良好”状态。
例如,当m=4,w=3时:
1 Good
2 Good
3 Good
4 Good
5 Good |
6 Good |- Window of size 3 where all are good.
7 Good |
8 Bad
9 Bad
10 Good
11 Good
12 Bad
13 Good
14 Bad
15 Bad
16 Bad
17 Bad <== System is deemed bad at this point So scan backwards to find "Good" window.
我知道这将以类似正则表达式搜索的方式结束,并且会模糊地回忆起从我记忆中黑暗的地方飘出来的Knuth,所以有人能向我简单介绍一下如何做到这一点吗?另外,为了实现这一点,我将在C.NET 3.5中在Windows XP系统上实现,该系统可以看到3GB的RAM(和i7处理器)。-
闻
这台机器以前有Windows7,但它有8GB的内存
是
TDWTF的故事)
最后,我将在这个系统的任何给定运行中扫描100000到数百万个项目的数量。在系统发生故障之前,我不需要跟踪整个运行,只需要跟踪所有项目的子集。当发生这种情况时,我可以转储所有收集到的数据,然后重新开始整个过程。但是,对于我跟踪的每个项目,我必须至少保留通过/失败状态和10个字符的字符串。所以我也在寻找如何在系统中收集和维护这些数据的建议。尽管我很想说:“嗯,即使整个过程以100%通过,它也能在内存中容纳所有内容,所以它会为您转到一个数组中去!”