有两个不同大小的时间戳列表以及一个idx。例如,
L1 = {(1,t1), (2,t2),..., (M,tM)} and
L2 = {(1,T1), (2,T2),..., (N,TN)} with M < N
对于这两个列表,我们都有t1<t2<...<tM
和T1<T2<...<TN
。每个列表的时间戳表示来自两个不同来源的项目到达时间。我们的目标是将(m,tm)
和(n,tn)
的{{1}}和dist(tm,tn)->min
分组为dist
,dist(tm,tn)->min
作为here?这意味着,最短列表将被上采样。一个有用的obervationn,只要C:\Windows\system32>pip install pydns
Collecting pydns
Using cached pydns-2.3.6.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\Shiva\AppData\Local\Temp\pip-build-294324_x\pydns\setup.py", line 12, in <module>
import DNS
File "C:\Users\Shiva\AppData\Local\Temp\pip-build-294324_x\pydns\DNS\__init__.py", line 14, in <module>
import Type,Opcode,Status,Class
ImportError: No module named 'Type'
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\Shiva\AppData\Local\Temp\pip-build-294324_x\pydns\
完整填充,就足以停止遍历最长的列表。鉴于我完全不熟悉linq逻辑,你能否提出一个有效的方法来进行这样的分组?
谢谢!
答案 0 :(得分:0)
我认为这基本上将两个列表合并在一起,假设它们已经排序。为了有效地做到这一点,你有两个选择,取决于M和N是否具有相似的大小,或者如果M <&lt;&lt; N(M的大小远小于N) 在这两种情况下,您都希望首先通过时间戳(升序
)对L2中的元素进行排序 M和N的大小相似
在这种情况下,我们执行合并,类似于合并排序。
M&lt;&lt; Ñ强>
在这种情况下,执行二进制搜索以便在L2中找到最接近的元素可能更快。也就是说,对于L1中的每个元素,进行二分搜索以找到它将被添加到L1的位置。检查L1中的两个相邻元素,找到哪个元素具有最接近的时间戳,并将该对保存在结果集中。
答案 1 :(得分:0)
你的意思是这样的:
L1 = {(1,t1), (2,t2),..., (M,tM)} and
L2 = {(1,t1), (2,t2),..., (N,tN)} with M < N
var result = L1.Select(i => new {idx1 = i.Item1,
idx2 = L2.Min(l => label(i,l).Item1}
);
其中label
是一个比较函数,它在时间戳之间为diff赋值(diff最短,值越小)。