Function 如何找到我的算法的最佳情况和最坏情况的公式?

Function 如何找到我的算法的最佳情况和最坏情况的公式?,function,math,big-o,Function,Math,Big O,我被赋予了一项任务。编写一个算法,这样,两个数据列表的输入将至少有一个共同点 这是我的算法:(我用php编写代码) 这是我自己的算法,不确定它是否好。那么,基于我的算法,如何找到最佳情况和最坏情况(大O)的公式 注意:如果我的算法错误,请务必让我知道。我的目标是“输入两个数据列表,至少有一个共同点。”开始: 有显式循环吗?如果是,它们将运行多少次(最大、最小、平均) 有隐式循环吗?如果是,它们将运行多少次(最大、最小、平均) 这些循环中有嵌套的吗?如果是这样,它们是否相互依赖?他们以什么方式依赖

我被赋予了一项任务。编写一个算法,这样,两个数据列表的输入将至少有一个共同点

这是我的算法:(我用php编写代码)

这是我自己的算法,不确定它是否好。那么,基于我的算法,如何找到最佳情况和最坏情况(大O)的公式

注意:如果我的算法错误,请务必让我知道。我的目标是“输入两个数据列表,至少有一个共同点。”

开始:

  • 有显式循环吗?如果是,它们将运行多少次(最大、最小、平均)
  • 有隐式循环吗?如果是,它们将运行多少次(最大、最小、平均)
  • 这些循环中有嵌套的吗?如果是这样,它们是否相互依赖?他们以什么方式依赖
  • 要开始,请执行以下操作:

  • 有显式循环吗?如果是,它们将运行多少次(最大、最小、平均)
  • 有隐式循环吗?如果是,它们将运行多少次(最大、最小、平均)
  • 这些循环中有嵌套的吗?如果是这样,它们是否相互依赖?他们以什么方式依赖

  • 最坏的情况可以通过假设两个列表都有一个相同的元素,并且它是每个列表上的最后一个元素来发现:这将导致通过检查第二个列表的所有元素来检查第一个列表(您正在使用数组中的
    ,但是假设您是手工操作的,这是相同的事情
    O(m)
    :复杂性)

    因此,您要对第二个列表执行
    n
    次,复杂性将是
    O(n*m)
    ,其中
    n
    是第一个列表的长度,
    m
    是第二个列表的长度


    寻找平均复杂度,你应该考虑一个对你计算的平均值的解决方案。这很简单,我把它留作练习。

    最坏的情况可以通过假设两个列表都有一个相同的元素,并且它是每个列表上的最后一个元素来找到:这将导致通过检查第二个列表的所有元素来检查第一个列表(您正在使用数组中的
    ,但假设您是手工操作的,这是一样的
    O(m)
    :复杂性)

    因此,您要对第二个列表执行
    n
    次,复杂性将是
    O(n*m)
    ,其中
    n
    是第一个列表的长度,
    m
    是第二个列表的长度


    寻找平均复杂度,你应该考虑一个对你计算的平均值的解决方案。这是很容易的,我把它作为一个练习。

    < P>在处理这类算法问题时,你必须从算法的角度考虑列表。也就是说,支持一组少量O(1)操作的数据类型。通常如下所示:

    • 检查列表是否为空
    • 在列表末尾追加一项
    • 获取列表的第一个元素
    • 从列表中删除第一个元素
    其思想是只使用上述运算符来表示所要求的内容,然后您所要做的就是将循环执行的次数乘以循环内部内容的复杂性


    <>在编写一个演化的编程语言而不是编写一个算法时,要非常小心,因为它隐藏了复杂性(@沮丧的FraseFraseDead在这个方面暗示)。

    < P>在处理这类算法问题时,你必须从算法的角度考虑列表。也就是说,支持一组少量O(1)操作的数据类型。通常如下所示:

    • 检查列表是否为空
    • 在列表末尾追加一项
    • 获取列表的第一个元素
    • 从列表中删除第一个元素
    其思想是只使用上述运算符来表示所要求的内容,然后您所要做的就是将循环执行的次数乘以循环内部内容的复杂性


    在用进化的编程语言编写代码而不是编写算法时要非常小心,因为它隐藏了复杂性(@fructedWithFormsDesign allready暗示了这一点)。

    您能更详细地解释一下“将至少有一个共同点”的含义吗?@Aeth:查看代码,问题是找到两个输入列表共有的元素,然后将该元素放在输出列表中。要计算两个集合的交集吗?@rachel:不清楚问题是两个列表的交集是什么,还是交集中有任何项目(查找两个列表是否至少有一个共有的项目)。第一个答案是你的程序做什么,但我敢打赌另一个答案,因为O(n)研究更有趣,因为最坏的情况和最好的情况可能不同。你能更详细地解释一下“将至少有一个共同点”是什么意思吗?@Aeth:看看代码,问题是找到两个输入列表的共同元素,然后将该元素放在输出列表中。要计算两个集合的交集吗?@rachel:不清楚问题是两个列表的交集是什么,还是交集中有任何项(查找两个列表是否至少有一个共同项)。第一个答案是你的程序做什么,但我敢打赌另一个答案,因为O(n)研究更有趣,因为最坏的情况和最好的情况可能不同。@Designer:对不起,我睡着了。我不能回答你的问题。但我认为,根据代码,只有1个循环。我不知道什么是显式循环和隐式循环。我会用谷歌搜索它,给我一些时间。@rachel7660:显式循环:一个你自己编写的循环。隐式循环:您尚未自己编写的循环,但可能存在于您调用的某个函数中。我提到implcit循环是为了提示:在这个代码示例中可能有一个@设计师:对不起,我睡着了。我不能回答你的问题。但我认为,根据代码,只有1个循环。我不知道什么是显式循环和隐式循环。我会用谷歌搜索,给我一些时间。@rachel7660:Explicit l
    $arrayA = array('5', '6', '1', '2', '7');
    $arrayB = array('9', '2', '1', '8', '3');
    $arrayC = array();
    
    foreach($arrayA as $val){
        if(in_array($val, $arrayB)){
            array_push($arrayC, $val);
        }
    }