作者tropical72 (我的血有铁的味道...)
看板Prob_Solve
标题Re: [问题]整数阵列中 取n个不重复整数
时间Fri Sep 11 00:45:26 2009
※ 引述《pyrochlore (患得患失)》之铭言:
: {我想从一个包含N个Object的阵列中
: 取出n个不重复的Object(n<N)
: 每个Object可以简单地看做是空间中的点
: 且这n个不重复的Object
: 两两之间的距离必须大於a}
: 因此不能像整数一样排序Object
: 刚刚用整数举例太过简化sorry
我的作法可能比别人回覆的麻烦而且慢
(因为很直觉的我想到就是这麽做)
1. 假设说明
(0) 假设所有的 Object 有 N组,
第 i 组 Object 记为 Object_i
要求的基本距离记为 a
(1) 假设 Object 为4维向量
Object1 = (X1, X2, X3, X4)
(二维的话想成是点座标)
(2) 假设 Object 符合线性条件,ex:
Object1 = (1,2,6,7)
Object2 = (4,5,2,1)
进行减法时 Object3 = Object2 - Object1 = (3, 3, 4, 6)
加法亦然
(3) 取得所有 Object X1-X4 的最小值
我记为 X1min, X2min, X3min, X4min
同时 Object_Min = (X1mkn, X2min, X3min, X4min)
(4) 我可以额外再开 N 组的实数(可以记录小数点的)阵列
阵列名称记为 Distance
同时第i个阵列存的实数以 Distance_i 表示
2. 将所有 Object 透过 Object_Min 进行座标平移,
平移後 Object 得到一组新的座标记为 Object',
故 Object_i' = Object_i - Object_Min
3. 接着计算 Object_i' 至 Object_Min 的距离,
记录到 Distance_i 里面去
4. 依 Distance 之大小做 Object' 排序
5. 希望你看得懂虚拟码...
Object temp = Object1;
FOR I = 1:N
FOR J = I+1:N
IF( DISTANCE(Object_I, Object_J) > a)
...... (细节再自己想)...
.......
END FOR J
END FOR I
6. 取出来的 Object_i' 都应该转回 Object_i
也就是 Object_i = Object_i' + Object_Min
7. 再次强调,这是很直觉的想法,完全没有优化过流程
其实是可以不透过 Object_Min 去做,
只是转换函数要写好就是了
8. 对於此方法有建议或觉得不可行,也欢迎提出
谢谢指教
--
我期待 我等待
肩狭骨上的翅膀早些长出来
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.68.127.69