之前也问过类似的问题,但没有明确的通用答案。(Joseph Adler 的实验不再在网上,他的书只说“编写一个 S4 类”。)
假设有一个包含多个索引的大型查找表。假设要查找的值大小适中。即使是 R 合并也很慢。下面是一个例子:
{
L <- 100000000 ## only 100M entries for 1GB*4 of int data
lookuptable <- data.frame( i1=sample(1:L), i2=sample(1:L), v1=rnorm(L), v2=rnorm(L) )
NLUP <- 10 ## look up only 10+1 values in large table
vali <- sample(1:L, NLUP)
lookmeup <- data.frame( i1= c(lookuptable[vali,1], -1),
i2= c(lookuptable[vali,2],-1), vA=rnorm(11) )
rm(vali); rm(L)
}
## I want to speed this up---how?
system.time( merge( lookmeup, lookuptable, by.x=c("i1","i3"), by.y=c("i1","i2"),
all.x=T, all.y=F, sort=F ) )
Run Code Online (Sandbox Code Playgroud)
(试试吧!在我的 2019 iMac 上 …
由于与问题没有太大关系的各种原因,我有一个带有由两个整数组成的复合键的表,我想从这两个数字中创建一个唯一的键.我最初的想法只是将它们连接起来,但是当我意识到(51,1)的复合键会产生与(5,11)相同的唯一键时,我很快就遇到了问题,即511.
有没有人有一种聪明的方法来生成两个整数中的整数,这样生成的整数对于一对起始整数是唯一的?
编辑:在面对令人印象深刻的数学后,我意识到我应该包括的一个细节是有问题的键的大小.在始发对中,第一个密钥当前是6位数,并且在系统的生命周期中可能保持7位数; 第二个关键还没有超过20个.鉴于这些限制,看起来问题就不那么令人生畏了.
给定 2 个整数 a 和 b(正数或负数)。有没有生成唯一ID号的公式/方法?
\n\n注意: 1. f(a,b) 和 f(b,a) 的结果应该不同。2. 计算 f(a,b) x 次 (x > 1),结果应该相同。
\n\n为了弄清楚这个问题,这个函数 f(n) = (n * p) % q (其中 n=输入序列值,p=步长,q=最大结果大小,n=非负整数,n < q , p < q, p \xe2\x8a\xa5 q (coprime)) 将给出唯一的 ID 号。
\n\n但是,在我的要求中,输入是两个数字,a和b可以是负整数或正整数。
\n\n任何参考都是值得重视的
\n我想做的是使 std::unordered_set 与我的自定义类 Vector2 一起使用成为可能 -包括搜索已经在 set 中的此类的对象的可能性。
让我提供更多细节。我的 Vector2 类的标头(包括自定义哈希表)如下:
Class Vector2
{
private:
static int lastID;
const int id;
int x;
int y;
public:
Vector2(int _x, int _y);
~Vector2();
bool Vector2::operator==(const Vector2& other) const;
int getId() const;
int getX() const;
int getY() const;
};
namespace std
{
template<>
struct hash<Vector2>
{
size_t
operator()(const Vector2& obj) const
{
return hash<int>()(obj.getId());
}
};
}
Run Code Online (Sandbox Code Playgroud)
此类的成员函数的实现很简单:
int Vector2::lastID = 0;
Vector2::Vector2(int _x, int _y) : id(lastID++)
{
x = …Run Code Online (Sandbox Code Playgroud) 我正在尝试确定map<double, double>类型的键.但问题是我想要的密钥将由一对2个数字生成.是否有任何好的函数可以生成像(0,1),(2,3),(4,2)(0,2)等对的密钥.
对于我正在制作的游戏,太阳系有x和y坐标,我想使用坐标随机生成该太阳系的特征.最简单的方法是使用两个种子x和y坐标为随机数生成器播种.无论如何从两粒种子中获得一粒可靠的种子,还是有一种好的PRNG需要两粒种子才能长时间生长?
编辑:我知道这两个数字之间的二进制运算,但我试图找到导致最少数量冲突的方法?加法和乘法很容易导致碰撞.但是XOR怎么样?
这是一个不同的问题,但我认为错误并没有错,所以我调整了标题以反映我真正想到的.
我正在制作一个动画,它在普通UITableViewCell的cell.imageView中获取一个图像的副本,并将其移动到屏幕底部的标签栏,以模拟将项目放入购物车.我可以复制图像并将副本作为窗口的子视图放置,但我无法弄清楚如何获得原始图像的绝对位置,因此我可以将它放在顶部作为动画的起点.
图像始终显示在屏幕顶部,就像放在0,0一样.
对不起这个问题的noobish性质,我敢肯定我错过了一些非常明显的东西.
- (void)tableView:(UITableView*)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath*)indexPath {
Run Code Online (Sandbox Code Playgroud)UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath]; UIImageView *originalImgView = cell.imageView; UIImageView *img = [[[UIImageView alloc] initWithImage: cell.imageView.image] autorelease]; NSLog(@"Original %@", originalImgView.bounds); // Shows "Original (null)" at runtime. NSLog(@"Window Points %@", [self.view.window convertPoint:originalImgView.frame.origin toView:nil]); NSLog(@"Cell Points: %@", cell.bounds); // Shows "Original (null)" at runtime. [img setFrame:CGRectMake( originalImgView.bounds.origin.x, originalImgView.bounds.origin.y , cell.imageView.image.size.width, cell.imageView.image.size.height)]; [self.view.window addSubview:img]; NSLog(@"Selected Cell: %@", cell); // Shows cell info at run time, works}
可能重复:
以唯一且确定的方式将两个整数映射到一个
我正在尝试为两个整数(Ruby)创建唯一标识符:
f(i1,i2) = f(i2, i1) = some_unique_value
Run Code Online (Sandbox Code Playgroud)
那么,i1 + i2,i1*i2,i1 ^ i2-不唯一以及(i1> i2)?"i1"+"i2":"i2"+"i1".
我认为以下解决方案可以:
(i1>i2) ? "i1" + "_" + "i2" : "i2" + "_" + "i1"
Run Code Online (Sandbox Code Playgroud)
但:
谢谢.
UPD:
实际上,我不确定结果必须是整数.也许我可以把它转换成十进制:(i1> i2)?i1.i2:i2.i1
?
我需要找到一种方法,这样用户必须输入2个数字(int),并且对于每个不同的值,返回单个输出(最好是int).假设用户输入6, 8它返回k当用户输入任何其他类似6,7或9,8其他任何输入时(m, n除非6, 8(即使只更改了一个输入))产生完全不同的输出.但问题是,它应该是唯一的,m, n所以我不能使用像是m*n因为6 X 4 = 24但也是,12 X 2 = 24所以输出不是唯一的,所以我需要找到一种方法,对于每个不同的输入,有一个完全不同的输出,是没有重复任何其他价值.
编辑:回应尼古拉斯:输入范围可以是任何但不到1000(但当然超过1)!
编辑2:响应Rawling,我可以使用long(Int64)但不优选使用float或doulbe,因为这个输出将用于for循环,而float和double对于for循环来说很糟糕,你可以在这里查看