查找下一个值更改的算法

时间:2017-08-30 04:56:33

标签: c algorithm

我在表中存储了一个Name和Int,其中Int列的值为0或1。

    N1, 1
    N2, 0,
    N3, 0
    N4, 0,
    N5, 1
    N6, 0,
    N7, 0,
    N8, 1
    N9 0
    N10 0
    N11 1

我需要查找从0到1的下一个值更改。 我需要键值对输出为(N2,N5)WHERE在N2中它有0,然后1在N5。相同的方式(N2,N5),(N6,N8)和(N9,N11)

任何想法如何为超过100k的记录有效地编写算法?

2 个答案:

答案 0 :(得分:2)

迭代数据,跟踪0和1的第一次出现,以成对。

如果你只需要做一次,那么这就是你要走的路。此外,100k +记录不是那么大,C可以快乐地解决这个问题。

可以通过短路if语句来获得一些加速(例如,如果你已经找到零,不要搜索另一个,直到找到1,因此已成对)。

像这样,在伪代码中:

string first_0 = "";
for row in table:
  if first_0 == "" && row.Int == 0:
    first_0 = row.Name;
  if first_0 != "" && row.Int == 1:
    print pair(first_0, row.Name);
    first_0 = "";

答案 1 :(得分:0)

您没有提供有关问题数据结构的足够详细信息,但针对许多查​​询的情况的一般解决方案可能看起来很简单:

添加其他字段(或链接表)nextChange 反向遍历您的桌子,保留lastOnelastZero ID(或名称)

 int lastValues[2];
 for i = last to first
      currentEntry.nextChange = lastValues[1 - currentEntry.Value];
      lastValues[currentEntry.Value] = currentEntry.id