比较两个巨大数组的最佳方法?

时间:2015-04-19 19:24:08

标签: arrays hash compare

我的任务是在一个具有市场价格的输入文件中拥有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?

2 个答案:

答案 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)。