※ 引述《ipojay (ipojay)》之铭言:
: 唐凤会不会太忙了
: 又要做短信实名,又要做疫苗预约,还很多旧系械要maintain
: 要有一个team在做吧?
: 短信实名赶鸭子上架,可能只负责塞资料进去
: 怎么好好捞资料出来应该还没做
: 假设短信实名一笔资料 有这些资料 - 电话,店名,时间
: 比较简单的做法
: select 店名,时间 from 数据库 where 电话=确诊者电话 and 时间>确诊时间5天前
: 这样确诊5天前之后所有去过的店就知道了
: 然后找出足迹重叠的人
: select 电话 from 数据库 where 店名=row['店名'] and 时间>=row['时间']
: and 时间<=(row['时间']+1天)
: 这样这家店在确诊者进入后一天内有来过的人的电话就知道了
: 理论不难,弄个接口会比较好捞资料
在下新竹尖石乡算法大神啦~
这个问题暴力解就是全部资料逐笔比对时间地点,即linear search 就行了 => O(N)
要比较厉害点,就是按时间地点(代码)排序一下 => O(N logN)
其实有点脑都知道,资料储存进去时就要按时间排序了,所以是 O(1)。
然后比对时间范围及地点,用 binary search => O(logN)
全部复杂度就是 O(logN),
log 几亿笔资料,查一个确诊者时间地点大概没十秒,
给你算一百个确诊者时间地点,就几分钟吧。
大概是这样~
楼下请给分。