我在Java中实现了 Cantor配对功能 2年前。现在,我正在向iOS移动,我需要在Objective-C中使用相同的东西。
问题是,至少从我的观点来看,在Java中我必须实现 BigSqrt 类 这是我自己做的。因为理论上我现在可以配对任何大小的数字。
因为我是iOS的新手,我真的不知道是否必须为objective-C再次实现所有的东西,或者是否已经实现了某些东西。如果是这样,有人可以给我一个提示,在 Objective-C 中为任何大小的“整数”开始实施 Cantor配对功能吗?
谢谢
答案 0 :(得分:3)
我用它在tableview单元格上设置标签:
NSUInteger cantorPair(NSIndexPath *indexPath)
{
NSUInteger x = indexPath.section;
NSUInteger y = indexPath.row;
return ((x + y) * (x + y + 1)) / 2 + y;
}
NSIndexPath *reverseCantorPair(NSUInteger z)
{
NSUInteger t = floor((-1.0f + sqrt(1.0f + 8.0f * z))/2.0f);
NSUInteger x = t * (t + 3) / 2 - z;
NSUInteger y = z - t * (t + 1) / 2;
return [NSIndexPath indexPathForRow:y inSection:x];
}
答案 1 :(得分:1)
这适用于C#版本,但在Objective-C中几乎相同:
http://sachiniscool.blogspot.com/2011/06/cantor-pairing-function-and-reversal.html
int CantorPair(short x, short y)
{
return ((x + y) * (x + y + 1)) / 2 + y;
}
并扭转配对
short[] Reverse(int z)
{
short[] pair = new short[2];
int t = (int)Math.Floor((-1D + Math.Sqrt(1D + 8 * z))/2D);
int x = t * (t + 3) / 2 - z;
int y = z - t * (t + 1) / 2;
pair[0] = (short)x;
pair[1] = (short)y;
return pair;
}