贪心技术与穷举搜索有何不同?

How is Greedy Technique different from Exhaustive Search?

我正在为一些示例问题编写伪代码,并且我注意到贪婪技术和穷举搜索之间的惊人模式。

       Job 1, Job 2, Job 3, Job 4, Job 5
Person:  1     9     2      7      8
Person:  2     6     4      3      7
Person:  3     5     8      1      8
Person:  4     7     6      9      4 

以上是table一道赋值题的例子。基本上,您有 n 份工作要做,这里有五份,您需要完成其中最少的工作,时间由 table 中每个人及其工作的附加值显示。

似乎穷举搜索和贪心技术的唯一区别是两者用于解决问题的数据结构。贪婪使用加权图,而穷举使用数组。这种情况在我们的算法中经常发生吗?是否有许多算法相互模仿,但只是使用更高效的数据结构来解决我们的问题?

贪婪算法会在过程的每一步做出局部最优选择,希望这会产生全局最优解,而穷举搜索会查看所有可能的解并选择最佳的一个。

贪心算法 运行 比穷举算法更快,但贪心算法不能保证问题的最优解。

详尽搜索探索 所有 可能的解决方案,然后它能够​​选择最佳的解决方案。

贪婪搜索从一些(部分)解决方案开始。然后,此解决方案 improved/completed 总是变得更好。但是,这并不一定会导致所有问题的最佳解决方案。

例子

想象一个超级简单的问题:你有这个数字序列:

index:   0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19
numbers: 1  6  5  4  5  6  7  8  9  5  2  1  0  1  5  4  5  6  4  1

你要找到最小的数字。如果你进行穷举搜索,你会遍历整个序列并且只 return 遇到的最小数字。如果你进行贪婪搜索,你会选择一些数字,例如索引为 7 的那个,即 8。然后您尝试贪婪地改进解决方案:您看对了 - 有 9,而且更糟。你向左看 - 有 7 个更好,所以移到那里。你再看看两边,右边有 8 个,左边有 6 个,所以向左走。你再这样做两次,你就会得到索引 3,其中数字 4 就是这个贪心搜索的最终解决方案——你不能通过向左或向右移动来进一步改进它,但显然不是最好的解决方案。但是你得到它的步骤也比穷举搜索少得多。

对于某些问题,穷举和贪心可能会产生相同的结果,但算法和时间复杂度(性能)会有所不同。此外,穷举搜索总是会给出最佳解决方案,但贪婪算法会为某些问题提供最佳解决方案,而对于其他问题则不会。

穷举搜索意味着尝试所有可能的解决方案并选择最好的一个。所以在这种情况下,这意味着我们想出所有划分工作的方法,然后选择最好的一个。 贪心算法 将问题分成更小的子问题。对于每个子问题,它都以最佳方式解决该子问题 'right now'。它可能不是长 运行 中最好的,但对于某些问题它会是。在这种情况下,贪心意味着我们接受一份工作并将其分配给最快完成的人。