大输入有什么意义?

时间:2013-04-14 09:43:40

标签: algorithm input

在Google Code Jam中,如果能够解决大输入问题,它可以为小输入提供2倍甚至3倍的点数。

但是,我不明白这一点。如果你创建一个可以处理任何正数案例的程序,它可以处理10个以及10000个输入案例。

因此,当您解决小输入的问题时,您应该能够解决大输入问题,而无需更改任何代码。

我错过了什么吗?

4 个答案:

答案 0 :(得分:7)

  

我错过了什么吗?

是的 - 你错过了时间限制。通常情况下,对小输入(例如,O(n^2)算法甚至O(2^N)算法)工作正常的算法在较大的输入上花费的时间太长,需要采用截然不同的方法。

例如,找到最长升序子序列的O(N^2)方法可以使用单个数组在四行代码中编码,并且对于几百个项目的输入它可以正常工作。但是,对于数十万个项目,这种方法会失败,需要使用树或二进制搜索的高级方法。由于这种不同的方法需要花费更长的时间来编码,因此用更多的点来奖励它是很自然的。

答案 1 :(得分:1)

这两个输入在这些领域可能有所不同:

  1. 问题输入限制 例如,您可以使用具有O(n^2)复杂度的算法来解决问题的小输入,但是您应该使用具有O(log n)复杂度的更好算法来解决大输入。

  2. 测试用例数 这在选择算法时也很重要。

  3. 测试用例的硬度 通常,大输入具有更难的测试用例,如边界条件等。

答案 2 :(得分:1)

你错了。编程语言使用特定的数据类型来存储数据。许多数据类型通常无法保存大数据值。因此,您需要修改代码以合并这些大数据值。

例如,如果您使用C打印斐波那契数字,那么您有一个简单的代码 像这样,

long int first,second,third;
first=1;
second=1;
ct=0;
while(ct < Limit)
{
   third=first + second;
   first = second;
   second = third;
   printf("\n%d",third);
   ct++;
}

此代码是正确的,但您将获得斐波纳契数字&gt;的错误结果。 2 32 (如果Limit非常大,则会发生),因为intlong int在C中是4个字节(32位)。

因此,由于C中数据类型的不足,您的正确算法会失败。对于解决方案,您需要实现自己的数据结构。

答案 3 :(得分:1)

Google Code Jam small&amp;大投入主要不是案件数量。实际上,大输入可能比小的输入更少。但是大投入的案例更难。 (这通常意味着更大,这解释了名称)如果你有两倍的输入数量,你可能需要两倍的时间来找到解决方案,这可能不是问题。但如果输入的次数增加两倍,则可能需要两倍以上的时间。