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

时间:2015-07-05 20:10:30

标签: algorithm brute-force greedy

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

       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 

以上是分配问题的表格示例。基本上你有大量的工作要做,这里有五个,而你需要以最小的数量完成它们,时间是通过每个人的附加值和他们在表中的工作来显示的。

似乎是穷举搜索和贪婪技术的唯一区别是两者用来解决问题的数据结构。贪婪使用加权图,而穷举使用数组。这在我们的算法中是否会发生很多?由于他们中的许多人彼此模仿,只是使用更有效的数据结构来解决我们的问题?

3 个答案:

答案 0 :(得分:5)

穷举搜索探索所有可能的解决方案,然后它能够​​选择最好的解决方案。

贪婪搜索从一些(部分)解决方案开始。然后以一种总是变得更好的方式改进/完成该解决方案。但是,这并不一定能带来所有这些解决方案的最佳解决方案。

示例

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

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

你要找到最小的数字。如果您进行穷举搜索,则会完成整个序列并返回遇到的最小数字。如果你进行贪婪搜索,你会选择一些号码,例如在索引7处的那个,即8。然后你试着贪婪地改进解决方案:你看起来正确 - 有9个,这更糟糕。你向左看 - 有7,哪个更好,所以搬到那里。你再看两边,右边有8个,左边有6个,所以向左走。你这样做了两次,然后你得到索引3,数字4在哪里。那个是这个贪婪搜索的最终解决方案 - 你不能通过向左或向右改进它,但显然不是最好的。但是你得到的步骤远远少于详尽的搜索步骤。

答案 1 :(得分:1)

贪婪算法将在流程的每个步骤中做出本地最优选择,希望这将导致全局最优解决方案,而穷举搜索将查看所有可能的解决方案并选择最佳解决方案。

贪婪算法的运行速度比穷举算法快,但贪婪算法并不能保证解决问题的最佳方案。

答案 2 :(得分:0)

对于某些问题,穷举和贪婪可能会产生相同的结果,但算法和时间复杂度(性能)会有所不同。此外,详尽的搜索将始终提供最佳解决方案,但贪婪的算法将为某些问题提供最佳解决方案,并为其他人赢得。

彻底搜索意味着尝试解决问题的所有方法并选择最佳解决方案。因此,在这种情况下,它意味着我们找出所有划分工作的方法,然后选择最好的工作。 贪心算法将问题分成更小的子问题。对于每个子问题,它以现在最好的方式解决了这个子问题'。从长远来看,它可能不是最好的,但对于某些问题,它将是。在这种情况下,贪婪意味着我们接受一份工作并将其分配给最快的人。