由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
CS版 - 请教个简单的几何算法问题 (转载)
相关主题
yacc 求助问一个信号采样的问题
关于随机矩阵的问题问个编程问题。关于大量数据排序。
为啥叫浮点?linux下如何sort一个大文件的内容? (转载)
求教 优化算法 迫切等待。多谢请教一个matlab画图问题。
问一个关于normalization的问题请教一个top-k elements的算法问题
请教一个搜索问题问个jsf的问题
[合集] Proof by Contradition !!! Re: destro爱CS讨论一道onsite时候问的问题 (转载)
[合集] Proof by Contradition !!! Re: destro工作中的问题,很困惑,请教大家,拍砖也欢迎
相关话题的讨论汇总
话题: distmat话题: disp话题: 距离话题: threshold话题: ptmat
进入CS版参与讨论
1 (共1页)
w****j
发帖数: 237
1
【 以下文字转载自 Programming 讨论区 】
发信人: winglj (coolking), 信区: Programming
标 题: 请教个简单的几何算法问题
发信站: BBS 未名空间站 (Tue Jan 31 02:45:09 2012, 美东)
如果有一组二维坐标点(x1,y1),(x2,y2)....(xn,yn),如何找出距离小于d的子集。例
如,找出(xi-xj)^2+(yi-yj)^2<=d^2的子集。
我是这样想的,把坐标点放入二维矩阵(n x 2),用双循环,i=1:n, j=1:n, 一个个比对
,把符合条件的i和j点放入一个(m x 4)的矩阵。但是这样是有重复的吧,另外也不能
剔除自身的情况(i=j)?
抱歉不是cs的,术语可能不对,如果可以用excel实现更好。先谢了。
z*****n
发帖数: 7639
2
suppose there are N points denoted as (1,...,N)
for i=1:N-1
for j=i+1:N
if(distance(i,j)<=d)
put link(i,j) in the set;
endif
endfor
endfor

【在 w****j 的大作中提到】
: 【 以下文字转载自 Programming 讨论区 】
: 发信人: winglj (coolking), 信区: Programming
: 标 题: 请教个简单的几何算法问题
: 发信站: BBS 未名空间站 (Tue Jan 31 02:45:09 2012, 美东)
: 如果有一组二维坐标点(x1,y1),(x2,y2)....(xn,yn),如何找出距离小于d的子集。例
: 如,找出(xi-xj)^2+(yi-yj)^2<=d^2的子集。
: 我是这样想的,把坐标点放入二维矩阵(n x 2),用双循环,i=1:n, j=1:n, 一个个比对
: ,把符合条件的i和j点放入一个(m x 4)的矩阵。但是这样是有重复的吧,另外也不能
: 剔除自身的情况(i=j)?
: 抱歉不是cs的,术语可能不对,如果可以用excel实现更好。先谢了。

l********a
发帖数: 1154
3
如果只是为了完成任务,用matlab吧
代码==
============================
disp('点个数:');
N = 4
disp('随机生成的N个点(每行是一个(x,y):');
ptMat = randi(100,[N,2])
disp('距离矩阵:');
distMat = squareform(pdist(ptMat))
disp('距离阀值(为了演示,选了距离的均值):');
threshold = mean2(distMat)
disp('得到上三角(下三角也行),去除重复:');
distMat = triu(distMat)
disp('找到距离小于threshold的点对(去除重复):');
idxMat = triu(distMat disp('找到距离小于threshold的点对序号(每行表示一对):');
[row,col] = find(idxMat);
[row,col]
=========================
运行结果:
=============================
点个数:
N =
4
随机生成的N个点:
ptMat =
38 96
20 93
49 6
34 74
距离矩阵:
distMat =
0 18.2483 90.6697 22.3607
18.2483 0 91.7061 23.6008
90.6697 91.7061 0 69.6348
22.3607 23.6008 69.6348 0
距离阀值(为了演示,选了距离的均值):
threshold =
39.5275
得到上三角(下三角也行),去除重复:
distMat =
0 18.2483 90.6697 22.3607
0 0 91.7061 23.6008
0 0 0 69.6348
0 0 0 0
找到距离小于threshold的点对(去除重复):
idxMat =
0 1 0 1
0 0 0 1
0 0 0 0
0 0 0 0
找到距离小于threshold的点对序号(每行表示一对):
ans =
1 2
1 4
2 4
============================
w****j
发帖数: 237
4
呵呵,这么快就有答案,谢谢。再问问有没有excel的function可以实现?
i**h
发帖数: 424
5

If complexity is not a problem, this is the easiest solution which takes O(n^2) time.
The problem itself is actually a classic computational geometry problem. The best solution for this problem is O(n+k) (k is the number of pairs in the result set). Google "Fixed-Radius Near Neighbors".

【在 z*****n 的大作中提到】
: suppose there are N points denoted as (1,...,N)
: for i=1:N-1
: for j=i+1:N
: if(distance(i,j)<=d)
: put link(i,j) in the set;
: endif
: endfor
: endfor

1 (共1页)
进入CS版参与讨论
相关主题
工作中的问题,很困惑,请教大家,拍砖也欢迎问一个关于normalization的问题
问一个很初级的编程问题请教一个搜索问题
[5个包子] 请教C/C++读取文件的遇到的问题[合集] Proof by Contradition !!! Re: destro爱CS
请教一个latex调整作者布局的问题 (转载)[合集] Proof by Contradition !!! Re: destro
yacc 求助问一个信号采样的问题
关于随机矩阵的问题问个编程问题。关于大量数据排序。
为啥叫浮点?linux下如何sort一个大文件的内容? (转载)
求教 优化算法 迫切等待。多谢请教一个matlab画图问题。
相关话题的讨论汇总
话题: distmat话题: disp话题: 距离话题: threshold话题: ptmat