Algorithm 关于算法分析的几个问题

Algorithm 关于算法分析的几个问题,algorithm,Algorithm,嗨!我说的是与算法有关的“O(n)”和“O(n)”。我不知道技术名称,然后我叫“算法分析器”(抱歉)。无论如何,问题是: 嗯,嗯。。。例如,如何“分析”算法以确定它们是否为“O(n/2)”?考虑什么? 例如,在排序算法中,“n”是要排序的元素数,括号内的操作是对它们进行排序的时间。但我确实在一个线程上看到,get算法是O(n/4),但我无法计算出“n”是要获取的对象数,或者真的是这样?或者根据算法的类型而变化 一些我需要知道的关于这件事的重要信息 我为我的英语道歉,如果我使用了非常“肤浅”的术语

嗨!我说的是与算法有关的“O(n)”和“O(n)”。我不知道技术名称,然后我叫“算法分析器”(抱歉)。无论如何,问题是:

  • 嗯,嗯。。。例如,如何“分析”算法以确定它们是否为“O(n/2)”?考虑什么?
  • 例如,在排序算法中,“n”是要排序的元素数,括号内的操作是对它们进行排序的时间。但我确实在一个线程上看到,get算法是O(n/4),但我无法计算出“n”是要获取的对象数,或者真的是这样?或者根据算法的类型而变化
  • 一些我需要知道的关于这件事的重要信息

  • 我为我的英语道歉,如果我使用了非常“肤浅”的术语。

    你基本上是在问如何分析算法的运行时间。这是没有捷径的,你必须学习这个理论。你可以用谷歌搜索。以下是您可以从中开始的一些链接:


    O是算法的复杂度。可能有几种类型的复杂性。您可以测量时间复杂度,即算法在时间上的复杂度。或者在记忆中。或者在磁盘存储空间中。后两者非常相似

    时间复杂度:根据输入的大小确定所需的操作数

    内存或磁盘存储复杂性:根据输入的大小确定将分配多少空间

    O(n/2)时间复杂性意味着您将需要处理比实际输入大小一半的操作

    因为输入是一个正整数,为了能够进行分析,你需要假设n->无穷大,也就是说,你有很多输入项

    那么O(n/2)是一个线性复杂度,因为(n/2)'=0.5。0.5是一个标量值,标量不会真正改变无穷大的复杂性。当您的输入大小有限时,事实上存在差异,但这是另一个需要解决的问题。所以

    O(n/2)O(n)

    因为两者都是线性的,即使Y=n/2的线与Y=n的线不同

    O(n^2)更复杂,因为(n^2)'=2*n

    因此,要理解复杂性,您需要理解描述复杂性的函数的导数(或在维度更多的情况下的微分)。如果函数描述了所有可能输入的操作数,则可以正确找到该函数

    确定复杂性的示例:

    我们考虑当我们有一个有限的、有序的数字集合时,我们在寻找一个特定的数字。我们第一次猜到中间的位置。如果我们猜对了,算法就会停止。如果不是,那么我们在上半部分以类似的方式检查这个数字,如果这个数字实际上小于我们在给定索引中找到的数字,在下半部分则不然。这种算法称为二进制搜索。那么,我们如何确定它的复杂性呢?首先,我们需要注意,我们有可能从第一次就猜到位置,所以最好的情况是O(1)。然而,如果我们不是那么幸运的话,我们可能需要多次减半。因此,复杂性问题被简化为:我们需要将集合减半多少次?它是一个数字,2的幂等于输入的大小。这是对数的定义,所以二进制搜索是对数的

    在计算存储复杂性时,也会进行类似的计算

    可能重复的