6

求问一个算法问题

 1 year ago
source link: https://www.v2ex.com/t/904334
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  程序员

求问一个算法问题

  winnerczwx · 6 小时 31 分钟前 · 669 次点击

有一组三维坐标数据 [{x, y, z}, {x, y, z}, ...], 现在需要随机生成一个坐标 且不能和已有坐标重复

x y z 最大值 = 100

请教有什么算法可以实现这个需求吗?

12 条回复    2022-12-23 20:17:35 +08:00
momocraft

momocraft      6 小时 23 分钟前

如果坐标是整数: 把原来的坐标整成带排序的数据结构,然后在“空洞”里随机生成就不会重复
ianEros

ianEros      6 小时 14 分钟前

我想到的也是提前把未使用的坐标存起来,然后在这个集合里面随机,如果最大值 100 ,size 最大值也就 1 ,000 ,000
zxCoder

zxCoder      6 小时 13 分钟前

随机就是一种算法,随机算法
shyrock

shyrock      6 小时 3 分钟前

感觉跟 hash 的思路有点像。
OP 能说一下问题的真实背景吗?
xuanzizhe

xuanzizhe      5 小时 24 分钟前

想到的最原始的方法就是先把坐标算出来存在数组里,然后取的时候每次从里面删一条,没啥算法可言了,相信应该有更好的方法勒~ https://reurl.cc/gQpdNX
vace

vace      5 小时 16 分钟前   ❤️ 1

整数的话 xyz 直接转固定长度二进制就行了

0b1100100 0b1100100 0b1100100

=> 0b110010011001001100100

也就:0 ~ 1651300 ,随机生成点数字的工作。
xuanbg

xuanbg      5 小时 14 分钟前

建立一个 size 为 100 的 3 维空间,就是一个[100,100,100]的 3 维数组并初始化好。然后随机在这个 3 维空间中取一个就行空的点就行了。
Tanix2

Tanix2      5 小时 12 分钟前 via iPhone

从已有坐标构建哈希表,随机生成坐标,通过比较哈西判断是否重复,重复则重新随机生成。
shiji

shiji      5 小时 9 分钟前 via iPhone

评论区真是精彩啊。 不看不知道,一看吓一跳。
Jakarta

Jakarta      4 小时 5 分钟前 via Android

原始坐标数据转成"到原点距离: [坐标,坐标,....]"的哈希,随机生成的坐标也计算一下到原点的距离,如果距离存在,就进一步比较坐标值。
不知是否可行?
wxf666

wxf666      3 小时 45 分钟前

如果取值范围是 0 ~ 100 ,一个三维坐标可以映射到一个 0 ~ (101^3-1) 的整数,后面就是生成不重复的随机整数就好

如果换成 bitmap 存储,大概只需 16 KB 内存即可?

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK