我正在调查数据结构以满足O(1)get操作,并遇到了一个名为Trie的结构。
我已经实现了以下简单的Trie
结构来保存数字(仅限数字)。
忽略内存泄漏 - 这不是主题:)
Data
类中的实际存储空间也不相关。
#include <sstream>
#include <string>
struct Data
{
Data(): m_nData(0){}
int m_nData;
};
struct Node
{
Node(): m_pData(NULL)
{
for (size_t n = 0; n < 10; n++)
{
digits[n] = NULL;
}
}
void m_zAddPartialNumber(std::string sNumber)
{
if (sNumber.empty() == true) // last digit
{
m_pData = new Data;
m_pData->m_nData = 1;
}
else
{
size_t nDigit = *(sNumber.begin()) - '0';
if (digits[nDigit] == NULL)
{
digits[nDigit] = new Node;
}
digits[nDigit]->m_zAddPartialNumber(sNumber.substr(1, sNumber.length() - 1));
}
}
Data* m_pData;
Node* digits[10];
};
struct DB
{
DB() : root(NULL){}
void m_zAddNumber(std::string sNumber)
{
if (root == NULL)
{
root = new Node;
}
root->m_zAddPartialNumber(sNumber);
}
Node* root;
};
int main()
{
DB oDB;
for (size_t nNumber = 0; nNumber <= 10000; nNumber++)
{
std::ostringstream convert;
convert << nNumber;
std::string sNumber = convert.str();
oDB.m_zAddNumber(sNumber);
}
return 0;
}
我的主要功能是简单地在数据结构中插入数字。 我已经检查了使用Windows任务管理器分配的整体内存,并且遇到了一个我无法解释的有趣功能,并且正在寻求您的建议。
我重新执行了我的简单程序,在结构中插入了不同的数字(改变for循环停止条件) - 这是一个实验结果表:
以对数缩放图形绘制数字显示:
如您所见,图表不是线性的。
我的问题是为什么?
我希望分配在整个范围内表现出线性。
答案 0 :(得分:1)
x 上 y 的线性关系的形式为 y = a + bx 。这是 y vs x 图中的直线,但不是 log(y) vs log(x)< / em> plot,除非常量 a = 0 。所以,我猜想你的关系可能仍然(几乎)线性与 a~340 kB。