如何產生大量的不重復的整數型三維坐標,求助求助,求大佬幫幫忙,急用
uj5u.com熱心網友回復:
定義域有多大?使用一個哈希方法來記錄值即可。
哈希的key可以是拼接的整數,當你的定義域比較小,不超過21位時,可以用 (x<<42)+(y<<21)+z作為key
當定義域很大時,可以用一個結構體
struct tag_coord{
int x;
int y;
int z;
} coord;
存盤坐標,而后用 unsigned char * p = &coord; 訪問各個位元組,查表替換為字串做哈希。用printf之類的數值會比較慢。
string bin2str[256] = {"00", "01", ...,"FF"};
string key;
for (int i=0;i<sizeof(coord);++i)
{
key += bin2str[p[i]];
}
uj5u.com熱心網友回復:
產生隨機坐標后,放到一個std::unorded_set里,
每次判斷set里有木有存在這個哈希,有的話說明重復了。沒有的話,OK
uj5u.com熱心網友回復:
可以參考24位真彩色的方式,就是三個數值,產生顏色空間。每個值的范圍是0-255如果值的范圍比這個大也好辦,換成16位32位64位的就好了。
怎么產生不重復的呢?且可以方便獲取到隨機的三維坐標值呢?最簡單的方式就是“降維打擊”,把三維空間降維成一維。
方法就是三個值zyx,先讓x從0開始自增,增到最大值后x歸零,y加一以此類推,列出所有的值。產生一個線性一維坐標空間,如果想隨機獲取坐標值,就用用一個亂數即可得到一個三維的坐標空間。
uj5u.com熱心網友回復:

無非搞個串列存盤,并查詢是否重復。
uj5u.com熱心網友回復:
如果沒有特別要求, 你就按順序產生就可以了:[1,1,1], [1,1,2], [1,2,1], [2,1,1], [1,1,3], ....
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/71322.html
標籤:C++ 語言
上一篇:復雜度計算
下一篇:氣象資料nc檔案顯示問題
