由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - F家题请教
相关主题
微软:求一个数列中最长单调上升子列,要求O(nlogn)时间an old problem on algorithm
说一个我自己用的题吧出两道题目大家做做
严格单调递增的最长子序列写个ServiceNow的面经吧
fb电面第一轮一道g家的几何题
被简单题给虐了。请教这道题有没有比较efficient的方法
问一道精华帖的老题发个A公司的面经
programming pearl看不懂这个题再贴这道算法题,寻答案,有包子送
问个简单清楚的google题,但我不会...问个Facebook 电面题
相关话题的讨论汇总
话题: 线段话题: 相交话题: endpoints话题: 区间话题: dp
进入JobHunting版参与讨论
1 (共1页)
x*********a
发帖数: 36
1
网上看的,说是F家的,哪位大侠说说怎么答?
Suppose we are given a set L of n line segments in the plane, where the
endpoints of each segment lie on the unit circle x^2 + y^2 = 1, and all 2n
endpoints are distinct. Describe and analyze an algorithm to compute the
largest subset of L in which no pair of segments intersects
l*********8
发帖数: 4642
2
首先把(x,y)坐标转换成极坐标: (1, t), 1是半径,t是角度.
半径都一样,不用关心。每个点用一个角度t来表示就可以了。
每个线段就可以表示成(t1, t2), 让t1 < t2
given两个线段A(a1, a2)和B(b1,b2), a1 则A,B相交 当且仅当: b1 (到了这一步,比较容易判断两条线段是否相交了。但不相交的最大集合,还是没有太
好的算法。。。)
其实,如果把每条线段看成一个node。如果两条线段相交,则两个node之间有边。这样
就得到一个图G。
问题等同于寻找图G的最大独立集(maximum disjoint set), 这是一个np-hard问题。

【在 x*********a 的大作中提到】
: 网上看的,说是F家的,哪位大侠说说怎么答?
: Suppose we are given a set L of n line segments in the plane, where the
: endpoints of each segment lie on the unit circle x^2 + y^2 = 1, and all 2n
: endpoints are distinct. Describe and analyze an algorithm to compute the
: largest subset of L in which no pair of segments intersects

y****2
发帖数: 1017
3
dp O(n2)或者O(n3)都可以做
注意这道题,线段的2个端点都在单位圆上。 我们只要对端点排序。 然后,只要x1 dp[i][j] = max(1+dp[start+1][end-1] +dp[end+1][j]
for start in range(i+1, j) )
l*********8
发帖数: 4642
4
能不能举个例子讲详细点儿。
初始值是什么? 计算的顺序是什么?

y1


【在 y****2 的大作中提到】
: dp O(n2)或者O(n3)都可以做
: 注意这道题,线段的2个端点都在单位圆上。 我们只要对端点排序。 然后,只要x1: : dp[i][j] = max(1+dp[start+1][end-1] +dp[end+1][j]
: for start in range(i+1, j) )

T*****u
发帖数: 7103
5
换成角度,就变成一维了。
d****n
发帖数: 233
6
可以这样,先算出N条线的斜率,排序找最大重复。O(NlogN)

【在 x*********a 的大作中提到】
: 网上看的,说是F家的,哪位大侠说说怎么答?
: Suppose we are given a set L of n line segments in the plane, where the
: endpoints of each segment lie on the unit circle x^2 + y^2 = 1, and all 2n
: endpoints are distinct. Describe and analyze an algorithm to compute the
: largest subset of L in which no pair of segments intersects

l*********8
发帖数: 4642
7
斜率不同也可以不相交

【在 d****n 的大作中提到】
: 可以这样,先算出N条线的斜率,排序找最大重复。O(NlogN)
z***e
发帖数: 58
8
LIS 问题,先按照min(p1,p2) 排序,where p1 p2表示线段端点的极坐标的那个角度。
然后就是就是经典的LIS问题了,dp[k] = max(dp[j] + 1) where j < k && seg[k].p2
> seg[j].p2 if seg[k].p1 and seg[j].p1 are selected to sort.复杂度O(n2)
t*****l
发帖数: 241
9

The direction of your reduction is wrong...

【在 l*********8 的大作中提到】
: 首先把(x,y)坐标转换成极坐标: (1, t), 1是半径,t是角度.
: 半径都一样,不用关心。每个点用一个角度t来表示就可以了。
: 每个线段就可以表示成(t1, t2), 让t1 < t2
: given两个线段A(a1, a2)和B(b1,b2), a1: 则A,B相交 当且仅当: b1: (到了这一步,比较容易判断两条线段是否相交了。但不相交的最大集合,还是没有太
: 好的算法。。。)
: 其实,如果把每条线段看成一个node。如果两条线段相交,则两个node之间有边。这样
: 就得到一个图G。
: 问题等同于寻找图G的最大独立集(maximum disjoint set), 这是一个np-hard问题。

d****n
发帖数: 233
10
longway2008 was on right track at the beginning:
首先把(x,y)坐标转换成极坐标, 每个点用一个角度t来表示就可以了。每个线段就可
以表示成(t1, t2),
这样一来, 我们可以得到n个区间。将这些区间按t2排序,得到新的数组A。
问题变成从A中找最大的非重叠区间。
设F(i)为第1个区间到第i个区间中的最大不重叠区间个数。
F(i)= Max{F(i-1),1+F(j)},A[j]是1。。。i-1
中结束点t2最接近A[i]的起始点t1并且不要A[i]重叠的区间。 j可以采
用Binarysearchded。
简单DP, 时间复杂度O(nlogn), 空间复杂度O(n)。
相关主题
问一道精华帖的老题an old problem on algorithm
programming pearl看不懂这个题出两道题目大家做做
问个简单清楚的google题,但我不会...写个ServiceNow的面经吧
进入JobHunting版参与讨论
l*********8
发帖数: 4642
11
我觉得问题不等同于“从A中找最大的非重叠区间”。
比如线段A是(0.1, 0.5), 线段B是(0.2, 0.3)
看作两个区间的话,是重叠的。 但两条线段是不相交的。

【在 d****n 的大作中提到】
: longway2008 was on right track at the beginning:
: 首先把(x,y)坐标转换成极坐标, 每个点用一个角度t来表示就可以了。每个线段就可
: 以表示成(t1, t2),
: 这样一来, 我们可以得到n个区间。将这些区间按t2排序,得到新的数组A。
: 问题变成从A中找最大的非重叠区间。
: 设F(i)为第1个区间到第i个区间中的最大不重叠区间个数。
: F(i)= Max{F(i-1),1+F(j)},A[j]是1。。。i-1
: 中结束点t2最接近A[i]的起始点t1并且不要A[i]重叠的区间。 j可以采
: 用Binarysearchded。
: 简单DP, 时间复杂度O(nlogn), 空间复杂度O(n)。

l*********8
发帖数: 4642
12
如果线段A是(0.1, 0.5), 线段B是(0.2, 0.3)
你的方法的答案包括几条线段?

p2

【在 z***e 的大作中提到】
: LIS 问题,先按照min(p1,p2) 排序,where p1 p2表示线段端点的极坐标的那个角度。
: 然后就是就是经典的LIS问题了,dp[k] = max(dp[j] + 1) where j < k && seg[k].p2
: > seg[j].p2 if seg[k].p1 and seg[j].p1 are selected to sort.复杂度O(n2)

d****n
发帖数: 233
13
注意这里区间是线段上两点的向心角,如果向心角相交,线段咋可能不相交?

【在 l*********8 的大作中提到】
: 我觉得问题不等同于“从A中找最大的非重叠区间”。
: 比如线段A是(0.1, 0.5), 线段B是(0.2, 0.3)
: 看作两个区间的话,是重叠的。 但两条线段是不相交的。

h***s
发帖数: 45
14
我理解题意是:"n条线段,所有线段的端点都在圆上,找出包含最多不相交线段的集合
。"
计算出所有线段的slope,有n个。
因为2n个点都是distinct的,所以n个线段不会有重叠的,找出不相交的线段最多的集合
,也就是找出同样斜率最多(平行线最多)的集合。如果将n个斜率排序,问题就转化成"
find the most duplicates in a sorted list"
Time: O(nlog(n) + n) --> TO(nlog(n))
Space: O(n) 需要一个array来存slopes,排序也会需要额外的空间,不会超过O(n)
不知道我理解的对不对,大家指正一下。
b******g
发帖数: 8
15
是否可以转化成计算最长递增子序列。两个线段A和B不相交的条件是A的左右端点都分
别在B的上方,将所有线段按左端点排序。

成"

【在 h***s 的大作中提到】
: 我理解题意是:"n条线段,所有线段的端点都在圆上,找出包含最多不相交线段的集合
: 。"
: 计算出所有线段的slope,有n个。
: 因为2n个点都是distinct的,所以n个线段不会有重叠的,找出不相交的线段最多的集合
: ,也就是找出同样斜率最多(平行线最多)的集合。如果将n个斜率排序,问题就转化成"
: find the most duplicates in a sorted list"
: Time: O(nlog(n) + n) --> TO(nlog(n))
: Space: O(n) 需要一个array来存slopes,排序也会需要额外的空间,不会超过O(n)
: 不知道我理解的对不对,大家指正一下。

g*******g
发帖数: 50
16
(0, 180) 和(45,135)当然不相交啊

【在 d****n 的大作中提到】
: 注意这里区间是线段上两点的向心角,如果向心角相交,线段咋可能不相交?
z***e
发帖数: 58
17

Answer:
0
after sorting
(0.1,0.5) (0.2,0.3)
dp[0] = 0
dp[1] = 0 since endpoint 0: 0.5 larger than endpoint1 : 0.3
So it won't add 1.

【在 l*********8 的大作中提到】
: 如果线段A是(0.1, 0.5), 线段B是(0.2, 0.3)
: 你的方法的答案包括几条线段?
:
: p2

l*********8
发帖数: 4642
18
这两条线段是不相交的。 所以答案应该是两条线段,不是0条。

【在 z***e 的大作中提到】
:
: Answer:
: 0
: after sorting
: (0.1,0.5) (0.2,0.3)
: dp[0] = 0
: dp[1] = 0 since endpoint 0: 0.5 larger than endpoint1 : 0.3
: So it won't add 1.

d****n
发帖数: 233
19
这样看来相交可以定义为线段在X轴上的投影相交,并且在Y轴上的投影也相交。

【在 g*******g 的大作中提到】
: (0, 180) 和(45,135)当然不相交啊
d****n
发帖数: 233
20
scratch, it's not right.

【在 d****n 的大作中提到】
: 这样看来相交可以定义为线段在X轴上的投影相交,并且在Y轴上的投影也相交。
相关主题
一道g家的几何题再贴这道算法题,寻答案,有包子送
请教这道题有没有比较efficient的方法问个Facebook 电面题
发个A公司的面经对于肯定会面挂的公司大家怎么回
进入JobHunting版参与讨论
e********2
发帖数: 495
21
我们学校的DP练习题:对所有线段的2个端点分别排序,然后找两个排好续的最大公共
子序列LCS. O(N^2)
e********2
发帖数: 495
22
这个是对的。LIS, LCS都行,LIS比LCS快。

【在 z***e 的大作中提到】
:
: Answer:
: 0
: after sorting
: (0.1,0.5) (0.2,0.3)
: dp[0] = 0
: dp[1] = 0 since endpoint 0: 0.5 larger than endpoint1 : 0.3
: So it won't add 1.

w*****t
发帖数: 485
23
这里有解答:
http://www.cs.toronto.edu/~robere/csc373h/files/A2-sol.pdf
search "3. Line Intersections (Redux)"
1 (共1页)
进入JobHunting版参与讨论
相关主题
问个Facebook 电面题被简单题给虐了。
对于肯定会面挂的公司大家怎么回问一道精华帖的老题
问题:判断一组线段是否相交programming pearl看不懂这个题
问个简单的数学编程题吧(google interview)问个简单清楚的google题,但我不会...
微软:求一个数列中最长单调上升子列,要求O(nlogn)时间an old problem on algorithm
说一个我自己用的题吧出两道题目大家做做
严格单调递增的最长子序列写个ServiceNow的面经吧
fb电面第一轮一道g家的几何题
相关话题的讨论汇总
话题: 线段话题: 相交话题: endpoints话题: 区间话题: dp