2

我有一个我在 2 年前写的 Java中的Cantor 配对函数的实现。现在我更多地转向 iOS 我在 Objective-C 中需要同样的东西。

问题是,至少从我的角度来看,在 Java 中我必须实现一个BigSqrt类。因为理论上我现在可以配对任何大小的数字。

因为我是 iOS 新手,所以我真的不知道我是否必须为 Objective-C 再次实现所有的东西,或者是否已经实现了一些东西。如果是这样,有人可以给我一个提示,从哪里开始为Objective-C中任何大小的“整数”实现康托尔配对功能

谢谢

4

2 回答 2

6

我用它在表格视图单元格上设置标签:

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];
}
于 2014-08-15T05:47:25.053 回答
2

这是针对 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;
}
于 2013-04-28T16:49:34.297 回答