Hilbert排序程序代码
来源:互联网 发布:象棋旋风软件 编辑:程序博客网 时间:2024/05/18 00:42
程序代码如下:
class Hilbert{ //Hilbert填充曲线的排列顺序,实现了空间上邻近排序的要求
int[][] grid; //二维网格数组
int rank; //阶数
Hilbert(int n) //构造函数
{
rank = n;
grid = new int[(int)Math.pow(2,n)][(int)Math.pow(2,n)]; //根据阶数生成网格数
}
void hilbertCurve() //生成Hilbert填充曲线
{
for(int i=1;i<=rank;i++)
{
if(i==1)
{
grid[0][0]=0;
grid[0][1]=3;
grid[1][0]=1;
grid[1][1]=2;
}
else
{
for(int j=0;j<(int)Math.pow(2,(i-1));j++)
for(int k=0;k<(int)Math.pow(2,(i-1));k++)
{
grid[j+(int)Math.pow(2,(i-1))][k] = (int)(grid[j][k]+Math.pow(4,(i-1))); //第1象限对应的网格
grid[j+(int)Math.pow(2,(i-1))][k+(int)Math.pow(2,(i-1))] = (int)(grid[j][k]+2*Math.pow(4,(i-1))); //第2象限对应的网格
grid[(int)(Math.pow(2,(i-1))-1)-k][(int)(Math.pow(2,i)-1)-j] = (int)(grid[j][k]+3*Math.pow(4,(i-1)));//第三象限对应的网格
}
for(int j=0;j<(int)Math.pow(2,(i-1));j++) //第0象限对应的网格
for(int k=0;k<=j;k++)
{
int temp = grid[j][k];
grid[j][k] = grid[k][j]; //按斜对角线翻转
grid[k][j] = temp;
}
}
}
}
int hilbertCurve(int i,int j) //输入数组坐标(x,y),返回Hilbert排序的序号
{
hilbertCurve();
int value = grid[i][j];
return value;
}
int[][] getHilbertGrid()
{
return grid;
}
int[] hilbertDecoding(int code) //输入Hilbert序号,返回数组坐标(x,y)
{
int[] decode = new int[2];
for(int i=0;i<(int)Math.pow(2,rank);i++)
for(int j=0;j<(int)Math.pow(2,rank);j++)
{
if(grid[i][j] != code)
continue;
else
{
decode[0] = i;
decode[1] = j;
break;
}
}
return decode;
}
}
- Hilbert排序程序代码
- Hilbert排序
- 快速排序程序代码
- 基于四叉树和Hilbert排序的空间数据组织
- 程序代码
- 程序代码
- 程序代码
- 字符串排序的程序代码 acm试题
- Java中一些常用的排序程序代码
- Hilbert 曲线
- Hilbert排列
- Hilbert space
- Hilbert 曲线
- hilbert矩阵
- HILBERT transform
- Hilbert 变换
- hilbert矩阵
- 选择排序法的思路及Java程序代码
- C#.net winform skin
- 地图坐标与屏幕坐标的转换
- 控制地图显示范围的参数
- Hilbert排序
- 2008年计算机硕士薪水总结
- Hilbert排序程序代码
- Gtk+的布局(Layout) 一、垂直、水平布局
- 群、环和域
- oracle 触发器常用的System-Defined Event Attributes
- vb串口通信编程
- 使用String.split方法时要注意的问题
- PureTalk.算法与数据结构——写在前面的话
- 面向嵌入式GIS的数据组织模型与存取机制(一)
- 单片机多字节数相乘的实现方法(转贴)