我在表中存储了一个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的记录有效地编写算法?
答案 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
反向遍历您的桌子,保留lastOne
和lastZero
ID(或名称)
int lastValues[2];
for i = last to first
currentEntry.nextChange = lastValues[1 - currentEntry.Value];
lastValues[currentEntry.Value] = currentEntry.id