【问题标题】:Best way to compare two huge arrays?比较两个巨大数组的最佳方法?
【发布时间】:2015-04-19 19:24:08
【问题描述】:

我的任务是在一个输入文件中拥有 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 的素数?

【问题讨论】:

    标签: arrays hash compare


    【解决方案1】:

    在 Java 中,默认加载因子是 0.75,因此您可以创建大小为:

    1.75 * &lt;size of your data&gt;

    这应该是一个好的开始。

    顺便说一句,您没有提到您将使用哪种语言。如果是 Java,您应该使用 HashMap - 而不是 Hashtable(仅供参考)。

    【讨论】:

      【解决方案2】:

      我不明白你为什么要写一个嵌套循环,因为它可以在一个循环 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,);
         }
      

      我认为您必须更改返回卡片和价格的方法 如果您需要详细说明数据,您可以使用缓冲区。

      我个人喜欢将这种大小的数据存储在数据库中。

      希望对你有所帮助。

      【讨论】:

      • Hashtable 不是一个好主意,因为它会是一个大结构。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      • 2017-11-10
      • 2018-04-03
      相关资源
      最近更新 更多