相关疑难解决方法(0)

创建两个数字的哈希码

我正在尝试为(a + b)C#中的复数类创建快速哈希码函数.

我反复看过这个a.GetHashcode()^b.GetHashCode()方法.但是,这将给予相同的哈希码(a,b)(b,a).

是否有任何标准算法来执行此操作,.Net框架中是否有任何功能可以帮助您?

.net algorithm

62
推荐指数
5
解决办法
3万
查看次数

python中的整数平方根

在python或标准库中是否存在整数平方根?我希望它是准确的(即返回一个整数),并且如果没有解决方案则吠叫.

目前我推出了自己的天真的:

def isqrt(n):
    i = int(math.sqrt(n) + 0.5)
    if i**2 == n:
        return i
    raise ValueError('input was not a perfect square')
Run Code Online (Sandbox Code Playgroud)

但它很难看,我不相信大整数.如果我超过了这个值,我可以遍历正方形并放弃,但我认为做这样的事情会有点慢.另外我想我可能正在重新发明轮子,这样的东西肯定已经存在于python ......

python math integer sqrt

51
推荐指数
7
解决办法
5万
查看次数

获取两个2D numpy数组的相交行

我想在两个2D numpy数组中获得相交(公共)行.例如,如果以下数组作为输入传递:

array([[1, 4],
       [2, 5],
       [3, 6]])

array([[1, 4],
       [3, 6],
       [7, 8]])
Run Code Online (Sandbox Code Playgroud)

输出应该是:

array([[1, 4],
       [3, 6])
Run Code Online (Sandbox Code Playgroud)

我知道如何用循环来做这件事.我正在寻找一种Pythonic/Numpy方式来做到这一点.

python numpy

33
推荐指数
5
解决办法
2万
查看次数

哈希函数从整数坐标对提供唯一的uint

问题一般: 我有一个很大的2d点空间,人口稀少的点.可以把它想象成一个涂有黑点的大白色帆布.我必须迭代并搜索这些点很多.Canvas(点空间)可能很大,接近int的限制,并且在设置点之前它的大小是未知的.

这让我想到了哈希:

理想: 我需要一个带2D点的哈希函数,返回一个唯一的uint32.这样就不会发生碰撞.您可以假设uint32可以轻松计算Canvas上的点数.

重要提示:事先不可能知道画布的大小(甚至可能会改变),所以就像这样

canvaswidth*y + x

遗憾的是,这是不可能的.

我也试过很天真

abs(x)+ abs(y)

但这会产生太多的碰撞.

妥协: 一种散列函数,它提供非常低的碰撞概率.

任何人的想法?谢谢你的帮助.

此致,Andreas T.

编辑:我不得不改变问题文本中的内容:我改变了"能够用uint32计算画布点数"的假设"能够计算画布上的点数(或者要存储的坐标对的数量")通过uint32.我原来的问题没有多大意义,因为我有一个sqrt(max(uint32))xsqrt(max(uint32))大小的画布,它可以通过16位移位和OR进行唯一表示.

我希望这是可以的,因为所有答案仍然对更新的假设最有意义

对不起.

hash hashtable

22
推荐指数
3
解决办法
2万
查看次数

为两个数字的组合生成唯一值

考虑我有两个数字1023232和44.我想生成一个代表这个数字组合的唯一数字.我该如何生成它?

需求

f(x,y)= f(y,x)和f(x,y)对于每个(x,y)或(y,x)是唯一的

c# uniqueidentifier

13
推荐指数
1
解决办法
7658
查看次数

什么是2D点结构的适当`GetHashCode()`算法(避免冲突)

请考虑以下代码:

struct Vec2 : IEquatable<Vec2>
{
    double X,Y;

    public bool Equals(Vec2 other)
    {
        return X.Equals(other.X) && Y.Equals(other.Y);
    }

    public override bool Equals(object obj)
    {
        if (obj is Vec2)
        {
            return Equals((Vec2)obj);
        }
        return false;
    }

    // this will return the same value when X, Y are swapped
    public override int GetHashCode()
    {
        return X.GetHashCode() ^ Y.GetHashCode();
    }

}
Run Code Online (Sandbox Code Playgroud)

除了比较双精度的平等对话(这只是演示代码)之外,我关注的是当X,Y值被交换时存在哈希冲突.例如:

Vec2 A = new Vec2() { X=1, Y=5 };
Vec2 B = new Vec2() { X=5, Y=1 };

bool test1 = …
Run Code Online (Sandbox Code Playgroud)

c# point hashcode

13
推荐指数
2
解决办法
1万
查看次数

JavaScript 中的元组集?

在 JavaScript 中实现Set坐标的最佳方法是什么?我希望能够做这样的事情:

let s=new Set();
s.add([1,1]);
if (s.has([1,1])) // false, since these are different arrays
Run Code Online (Sandbox Code Playgroud)

上面的方法不起作用,因为它Set存储的是对数组的引用而不是内容。

javascript tuples set ecmascript-6

11
推荐指数
1
解决办法
6783
查看次数

如何使用两个数字作为Map键

我有两个号码,我想将它们一起用作一个键Map.目前,我正在连接他们的字符串表示.例如,假设密钥号是4和12.我使用:

String key = 4 + "," + 12;
Run Code Online (Sandbox Code Playgroud)

地图声明为Map<String, Object>.

我觉得这太糟了!我喜欢用别的东西String作为钥匙!我想要以最快的方式创建这些密钥.

谁有个好主意?

java collections performance key data-structures

9
推荐指数
4
解决办法
2万
查看次数

在 C 中计算嵌套根

我被要求仅使用递归计算以下嵌套根表达式。

在此处输入图片说明

我写了下面的代码,但它们允许我们只使用一个函数和 1 个输入n,而不是像我使用的那样使用 2 个。有人能帮我把这段代码转换成一个可以计算表达式的函数吗?不能使用任何库,除了来自<math.h>.

n=10 时的输出: 1.757932

double rec_sqrt_series(int n, int m) {
    if (n <= 0)
        return 0;
    if (m > n)
        return 0;
    return sqrt(m + rec_sqrt_series(n, m + 1));
}

double helper(int n) {
    return rec_sqrt_series(n, 1);
}
Run Code Online (Sandbox Code Playgroud)

c recursion sqrt

9
推荐指数
3
解决办法
235
查看次数

周围物体算法

我工作的一个游戏,只有一个对象可以在位置存在(x, y)哪里x以及yints.例如,对象可能存在于(0, 0)或不存在,但是不可能同时存在多个对象.

我正在尝试确定哪个STL容器用于手头的问题以及解决此问题的最佳方法.

基本上,我从一个对象及其(x, y)位置开始.目标是根据该对象的周围对象确定最高,最大可能的矩形.必须使用当前对象上方和下方的所有对象创建矩形.也就是说,它必须是最高的,它可能基于起始物体位置.

例如,假设以下代表我的对象网格,并且我从位置处的绿色对象开始(3, 4):

在此输入图像描述

然后,我正在寻找的矩形将由下面的粉红色方块表示:

在此输入图像描述

因此,假设我开始与该对象在(3, 4)类似的例子表明,我将需要检查的对象也存在在(2, 4),(4, 4),(3, 3),和(3, 5).如果某个对象存在于任何这些位置,我需要重复该对象的过程以找到最大可能的矩形.

这些物品相当罕见,游戏世界庞大.new由于大多数元素都是空的,因此对于整个游戏世界而言仅仅是2D阵列似乎不实际.但是,我需要索引到任何位置以检查对象是否随时存在.

相反,我想过使用std::map这样的:

std::map< std::pair<int, int>, ObjectData> m_objects;
Run Code Online (Sandbox Code Playgroud)

然后,当我检查周围的物体时,我可以map::find()在我的循环中使用,检查是否存在周围的物体:

if(m_objects.find(std::pair<3, 4>) != m_objects.end())
{
    //An object exists at (3, 4).
    //Add it to the list of surrounding objects.
}
Run Code Online (Sandbox Code Playgroud)

map::find()如果我决定这样做,我可能会做很多调用,但是地图占用的内存比new整个世界的2D数组少得多.

有没有人对我可以用来找到我要找的东西的简单算法有任何建议?我应该继续使用 …

c++

7
推荐指数
1
解决办法
517
查看次数