我实现了algorithm
,它将所有正整数解决方案打印到等式a^3 + b^3 = c^3 + d^3
,其中 a,b,c,d是1到1000之间的整数。
为此,我使用hash table
将complexity
放到O(N2)
。 H = c^3 + d^3
以下是我使用(整数对列表)的hash table
:
int n = 10;
int m = pow(n,3)+pow(n,3);
list< pair<int,int> > hashTable[m+1]; //(*) Core Dump here if n>50. Why?
n&lt; = 50 时,我的代码可以正常工作。但我无法为 n&gt; 50 运行我的algorithm
。所以,我无法解决 n = 1000 的问题。我在行(*)中获得了核心转储。你能解释一下为什么会发生这种情况,并帮助我以更好的方式实施我的hash table
吗?
感谢您的时间!
答案 0 :(得分:0)
问题是你试图在堆栈上分配hashTable
数组,它有大小限制(默认为几兆字节)。当n = 50且sizeof(std::list<std::pair<int, int> >) = 16
时,所需的内存大小仅为2MB。比这更大 - 你的堆栈大小已经用完了。
要修复它,请动态分配hashTable
数组或使用std::unordered_set
而不是实现自己的哈希表。