这是我目前的图表:

虚线蓝线表示与我正在寻找的x值相对应的y值.我试图找到线与蓝色曲线(上)的交点的x值.由于相互作用不落在已经定义的点上,我们需要插入一个落在上图上的点.
这是我的信息:
LineValue - 交集的y值和虚线的值(y = LineValue)Frequency - 包含此图上所示x值坐标的数组.对应于LineValue的频率的插值是我们正在寻找的上/下 - 包含此图的y值信息的数组
是否有更好,更优雅和简洁的方法来获得C#中两个列表的交集?
在C#中,计算日期列表交集的方法是:
public List<DateTime> dates_common(Timeserie ts1, Timeserie ts2)
{
var dt1 = new HashSet<DateTime>(ts1.dates);
var dt2 = new HashSet<DateTime>(ts2.dates);
dt1.IntersectWith(dt2);
var dt = new DateTime[dt1.Count];
dt1.CopyTo(dt);
return new List<DateTime>(dt);
}
Run Code Online (Sandbox Code Playgroud)
在Ruby中,可以这样做:
def dates_common(ts1, ts2)
dt1 = ts1.dates.to_set
dt2 = ts2.dates.to_set
return dt1.intersection(dt2).to_a
end
Run Code Online (Sandbox Code Playgroud)
这种笨拙的根本原因是IEnumerable和具体容器和数组之间的不对称性.
我不断惊讶于C#标准库的设计非常糟糕,因为这种问题一直存在.
有没有更好的,这意味着更优雅和简洁,这样做的方式?
我一直在审查算法,这是Anany Levitin的算法书中的问题。
您在实线上有n个打开间隔(a1,b1),...,(an,bn)的列表。(一个开放区间(a,b)严格包含其端点a和b之间的所有点,即(a,b)=(xi a <x <b}。)找出这些区间中具有共同点的最大数目例如,对于时间间隔(1、4),(0、3),(-1.5、2),(3.6、5),此最大数为3。为此问题设计一种算法,其算法优于二次方程时间效率。
任何人都可以帮助我为它形成算法或在互联网上建议任何资源。
谢谢,哈琳德拉
我想知道如何将2D屏幕坐标映射到3D世界(特别是xz平面)知道:
- 相机的位置
- 屏幕平面的等式
- xz平面的等式
当我将鼠标悬停在xz平面上时,我想做的就是让xz平面上的土地亮起来.
任何帮助是极大的赞赏!
谢谢!
我定义了两个列表的交集,如下所示:
def intersect(a, b):
return list(set(a) & set(b))
Run Code Online (Sandbox Code Playgroud)
对于三个参数,它看起来像:
def intersect(a, b, c):
return (list(set(a) & set(b) & set(c))
Run Code Online (Sandbox Code Playgroud)
我可以针对可变数量的列表推广此函数吗?
电话会看起来像:
>> intersect([1, 2, 2], [2, 3, 2], [2, 5, 2], [2, 7, 2])
[2]
Run Code Online (Sandbox Code Playgroud)
编辑:Python只能这样实现吗?
intersect([
[1, 2, 2], [2, 3, 2], [2, 5, 2], [2, 7, 2]
])
[2]
Run Code Online (Sandbox Code Playgroud) 在DFA中,我们可以通过执行两个自动机状态的交叉乘积并接受在初始自动机中接受的那些状态来完成两个自动机的交集.联盟的表现同样如此.虽然我可以轻松地使用epsilon过渡在NFA中进行联合,但我如何做他们的交集呢?
我目前有两个数组,每个数组包含范围.你将如何获得这两个数组的交集.换句话说,我想得到一个范围数组,它只包含两个原始数组中包含的范围.我尝试过.Intersect,但是在我学习的时候这对数组不起作用.
array1 :(范围("A1"),范围("B1"),范围("C1"))array2 :(范围("A1"),范围("A2"),范围("A3"))
结果:(范围("A1"))
我正在努力理解这个程序,但我遇到了一些困难.我不理解的部分x_min,y_min,x_max,y_max.
我理解程序经过两个矩形与左下和右上坐标点,但是在做数组索引[0][0],[1][1]等等从何而来?
我对发生的事情感到困惑,所以解释会有所帮助.
# Write a function, `rec_intersection(rect1, rect2)` and returns the
# intersection of the two.
#
# Rectangles are represented as a pair of coordinate-pairs: the
# bottom-left and top-right coordinates (given in `[x, y]` notation).
#
# Hint: You can calculate the left-most x coordinate of the
# intersection by taking the maximum of the left-most x coordinate of
# each rectangle. Likewise, you can …Run Code Online (Sandbox Code Playgroud) 我经常发现自己想测试两个集合的交集而不使用交集的结果。
set1 = set([1,2])
set2 = set([2,3])
if(set1 & set2):
print("Non-empty intersection")
else:
print("Empty intersection")
Run Code Online (Sandbox Code Playgroud)
问题是创建了一个新的集合来执行此测试,这可能效率很低。
是否有一个简短的方法无需明确写出即可(如下所示)?
if(any(x in set2 for x in set1)):
print("Non-empty intersection")
else:
print("Empty intersection")
Run Code Online (Sandbox Code Playgroud) 随机选择两个集合,两个集合都包含不同的密钥(一个密钥可能属于多个集合,一个集合永远不能包含重复的密钥).
返回一个整数,表示属于两个组的键数.
例如,intersect({1,2,3,4},{3,4,5})返回2.
我只需要交叉点的大小.我不需要确切地知道交叉点中哪些键.
是否有任何数据结构在不到O(n)的时间内支持这种操作?
编辑:
读取数据确实需要O(n)时间,但这不会导致您不能在少于O(n)时间内完成交叉操作的结论.
想象这个场景:
我有N套,每套包含100把钥匙.我读了它们,那是N*100次操作.现在我想知道女巫对有最大的交集,即O(N²)交叉操作.所以我想减少交叉操作的复杂性.我不是真的关心读取和构建集合所花费的时间,最多为N*100,这与O(N²)交叉操作无关.
请注意,通过执行少于O(N²)交叉操作,您无法找到具有最大交点的一对集合,我可以证明这一点.您必须执行所有交叉操作.
(他的基本思想是,让我们想象一个完整的图,有N个顶点,每个顶点代表一个集合,Nx(N-1)/ 2个边,每个代表连接对的交集.现在给每个边不为所有你想要的negetive weight(代表交叉点大小),我总是可以构造N个满足那些Nx(N-1)/ 2边缘权重.这证明了我的主张.)
algorithm intersection time-complexity set-operations data-structures