我试图制作一个程序,通过使用二叉搜索树和向量来最终显示与大数据输入的运行时差异。但在我开始之前,我正在测试插入和搜索功能是否正常工作。它似乎很好,但每当我将SIZE
指定为3000万或更多时,大约10-20秒后,它将只显示Press any key to continue...
没有输出。但是,如果我将SIZE
指定为等于或大于2000万,则会在编程时输出搜索结果。那么您认为导致这个问题的是什么?
一些旁注:
我将随机生成的唯一(无重复)值存储到树中以及向量中。所以最后,树和向量都将具有完全相同的值。当程序运行搜索部分时,如果在BST中找到一个值,那么它也应该在向量中找到。到目前为止,当使用2000万或更少的值时,这没有任何问题。
另外,我使用randValue = rand() * rand();
生成随机值,因为我知道rand()的最大值是32767.因此,将它自身相乘将保证0到1,073,741,824之间的数字范围。我知道我使用的插入和搜索方法效率低下,因为我确保没有重复,但现在不是我的问题。这只是为了我自己的实践。
为了简单起见,我只发布了我的main.cpp。如果您认为问题出在我的其他文件中,我会发布其余文件。
这是我的main.cpp:
#include <iostream>
#include <time.h>
#include <vector>
#include "BSTTemplate.h"
#include "functions.h"
using namespace std;
int main()
{
const long long SIZE = 30000000;
vector<long long> vector1(SIZE);
long long randNum;
binarySearchTree<long long> bst1;
srand(time(NULL));
//inserts data into BST and into the vector AND makes sure there are no duplicates
for(long long i = 0; i < SIZE; i++)
{
randNum = randLLNum();
bst1.insert(randNum);
if(bst1.numDups == 1)//if the random number generated is duplicated, don't count it and redo that iteration
{
i--;
bst1.numDups = 0;
continue;
}
vector1[i] = randNum;
}
//search for a random value in both the BST and the vector
for(int i = 0; i < 5; i++)
{
randNum = randLLNum();
cout << endl << "The random number chosen is: " << randNum << endl << endl;
//searching with BST
cout << "Searching for " << randNum << " in BST..." << endl;
if(bst1.search(randNum))
cout << randNum << " = found" << endl;
else
cout << randNum << " = not found" << endl;
//searching with linear search using vectors
cout << endl << "Searching for " << randNum << " in vector..." << endl;
if(containsInVector(vector1, SIZE, randNum))
cout << randNum << " = found" << endl;
else
cout << randNum << " = not found" << endl;
}
cout << endl;
return 0;
}
答案 0 :(得分:1)
(根据OP的要求将评论转贴为答案)
选项包括:编译64位(如果你还没有 - 根据RAM或地址空间是否有问题可能会变得更好或更差),购买更多内存,调整操作系统的交换内存设置(让它使用)更多的磁盘),设计一个更节省内存的树(但最多你可能只会得到一个数量级的改进,可能更少,它可能会影响其他的东西,如性能特征),重新设计你的树,以便手动保存数据到磁盘并将其读回(例如使用LRU)。
这是在VC ++上编译64位的方法:msdn.microsoft.com/en-us/library/9yb4317s.aspx