本帖最后由 hbghlyj 于 2021-7-2 01:44 编辑 以这组点为例:
L = DeleteDuplicates[Table[RandomInteger[{0, 1000000}], 100]]
输出为
{111988, 91827, 418006, 23684, 152143, 815641, 589995, 944654,
850248, 993531, 736348, 561984, 439202, 290744, 47756, 336557,
421330, 925291, 447834, 278393, 859888, 627030, 523926, 614873,
977777, 340880, 763863, 171909, 441676, 243728, 697049, 988835,
943911, 238207, 717667, 212786, 37319, 765158, 356441, 99623, 151717,
81172, 394806, 560386, 228408, 559788, 722764, 374600, 833726,
532868, 274918, 399552, 900602, 581973, 132044, 381181, 445016,
362752, 433424, 57090, 347405, 113425, 899909, 903147, 521921,
923471, 484862, 839227, 519225, 344360, 537103, 607180, 855724,
861408, 955922, 983303, 811503, 190691, 491088, 258497, 895099,
599895, 562591, 124538, 271507, 190306, 980727, 918464, 412639,
172971, 813125, 417767, 852197, 622839, 692846, 674402, 3591, 777488,
339130, 86852}
---------
算法1.其中用了这帖的FindDuplicates- AbsoluteTiming[
- Module[{},
- position =
- Flatten[Table[{i, j}, {i, 1, Length[L] - 1}, {j, i + 1,
- Length[L]}], 1];
- Flatten[
- Subsets[#, {2}] & /@
- Map[position[[#]] &,
- FindDuplicates[
- Flatten[Table[
- Abs[L[[i]] - L[[j]]], {i, 1, Length[L] - 1}, {j, i + 1,
- Length[L]}]]], {2}], 1]]]
复制代码 输出为
{0.0120459, {{{2, 48}, {6, 50}}, {{2, 50}, {6, 48}}, {{4, 41}, {39,
45}}, {{4, 45}, {39, 41}}, {{5, 34}, {18, 68}}, {{5, 68}, {18,
34}}, {{14, 74}, {76, 89}}, {{14, 89}, {74, 76}}, {{27, 56}, {43,
98}}, {{27, 98}, {43, 56}}, {{42, 69}, {83, 84}}, {{42, 84}, {69,
83}}}}
测试多次,实际用时0.011~0.012秒
------------
算法2.其中用了这帖的FindDuplicates- AbsoluteTiming[
- Module[{},
- position =
- Flatten[Table[{i, j}, {i, 1, Length[L] - 1}, {j, i + 1,
- Length[L]}], 1];
- g[{{a_, b_}, {c_, d_}}] = {{{a, c}, {b, d}}, {{a, d}, {b, c}}};
- Flatten[g /@ Subsets[#, {2}] & /@
- Map[position[[#]] &,
- FindDuplicates[
- Flatten[Table[
- L[[i]] + L[[j]], {i, 1, Length[L] - 1}, {j, i + 1,
- Length[L]}]]], {2}], 2]]]
复制代码 输出为
{0.0087029, {{{2, 48}, {6, 50}}, {{2, 50}, {6, 48}}, {{4, 41}, {39,
45}}, {{4, 45}, {39, 41}}, {{5, 34}, {18, 68}}, {{5, 68}, {18,
34}}, {{14, 74}, {76, 89}}, {{14, 89}, {76, 74}}, {{27, 56}, {43,
98}}, {{27, 98}, {43, 56}}, {{42, 69}, {83, 84}}, {{42, 84}, {83,
69}}}}
测试多次,实际用时0.008~0.009秒 |