我的任务是在一个具有市场价格的输入文件中拥有1,000,000张卡片,然后在另一个输入文件中使用相同的1,000,000张卡片以及更高的价格,我必须比较两者以计算利润。
嵌套for循环:
for(int i = 0; i < marketPriceCards.size(); i++){
for(int j = 0; j < priceListCards.size(); j++){
compute profit
是O(n ^ 2)太长了。我在考虑一个哈希表,但我有多大可以做到?素数高于1000000?
答案 0 :(得分:1)
我不明白为什么你写了一个嵌套循环,因为它可以在一个循环O(n)中完成。 由于您的数据记录在两个大文件中,您需要读取它们,因为您需要所有数字,因此需要遍历整个文件。 如果记录小于100,000,我建议使用mopen()将它们加载到内存中,但是你有两个大文件并将它们加载到内存中并不是一个聪明的动作。所以这就是我认为你应该做的事情,如果你有文本文件
cardsFile = fopen ("elapsed.dta", "rt");
priceFile = fopen ("elapsed.dta", "rt");
while(fgets(aCardline, 80, cardsFile) != NULL)
{
sscanf (aCardline, "%ld", &aCard);
fgets(aPriceline, 80, priceFile)
sscanf (aCardline, "%ld", &aPrice);
printf ("Card :%s Price :%ld\n", aCard, aPrice,);
}
我认为你必须改变退卡和价格的方法 如果您需要详细说明数据,可以使用缓冲区。
我个人喜欢将这个大小的数据存储在数据库中。
希望这会对你有所帮助。
答案 1 :(得分:0)
在Java中,默认加载因子为0.75,因此您可以创建大小为:
的哈希表 1.75 * <size of your data>
这应该是一个好的开始。
顺便说一下,你没有提到你要使用哪种语言。如果它是Java,你应该使用HashMap - 而不是Hashtable(只是FYI)。