贪心算法 订阅
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 [1]  。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。也就是说,不从整体最优上加以考虑,做出的只是在某种意义上的局部最优解 [1]  。 展开全文
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 [1]  。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。也就是说,不从整体最优上加以考虑,做出的只是在某种意义上的局部最优解 [1]  。
信息
别    称
贪婪算法 [1]
领    域
数理科学 [1]
定    义
做出在当前看来是最好的选择 [1]
中文名
贪心算法 [1]
核    心
根据题意选取一种量度标准
外文名
greedy algorithm [1]
贪心算法算法思路
贪心算法一般按如下步骤进行: [2]  ①建立数学模型来描述问题 [2]  。②把求解的问题分成若干个子问题 [2]  。③对每个子问题求解,得到子问题的局部最优解 [2]  。④把子问题的解局部最优解合成原来解问题的一个解 [2]  。贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。贪心算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择,就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解。虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪心算法不要回溯 [2]  。
收起全文
精华内容
下载资源
问答
  • 贪心算法

    千次阅读 2019-10-24 17:27:47
    贪心算法

    455. 分发饼干

    https://leetcode-cn.com/problems/assign-cookies/

     

     把最大的饼干最贪心的小朋友,如果无法满足就往前面找次贪心的小朋友

     

    /// 455. Assign Cookies
    /// https://leetcode.com/problems/assign-cookies/description/
    /// 先尝试满足最贪心的小朋友
    /// 时间复杂度: O(nlogn)
    /// 空间复杂度: O(1)
    public class Solution {
        public int findContentChildren(int[] g, int[] s) {
            Arrays.sort(g);
            Arrays.sort(s);
            int gi = g.length - 1, si = s.length - 1;
            int res = 0;
            while (gi >= 0 && si >= 0) {
                if (s[si] >= g[gi]) {
                    res++;
                    si--;
                }
                gi--;
            }
            return res;
        }
        //public static void main(String[] args) {
        //    int g1[] = {1, 2, 3};
        //    int s1[] = {1, 1};
        //    System.out.println((new Solution()).findContentChildren(g1, s1));
        //    int g2[] = {1, 2};
        //    int s2[] = {1, 2, 3};
        //    System.out.println((new Solution()).findContentChildren(g2, s2));
        //}
    }
    //C++
    /// 455. Assign Cookies
    /// https://leetcode.com/problems/assign-cookies/description/
    /// 先尝试满足最贪心的小朋友
    /// 时间复杂度: O(nlogn)
    /// 空间复杂度: O(1)
    class Solution {
    public:
        int findContentChildren(vector<int>& g, vector<int>& s) {
            sort(g.begin(), g.end(), greater<int>());
            sort(s.begin(), s.end(), greater<int>());
            int gi = 0, si = 0;
            int res = 0;
            while(gi < g.size() && si < s.size()){
                if(s[si] >= g[gi]){
                    res ++;
                    si ++;
                    gi ++;
                }else{
                    gi ++;
                }
            }
            return res;
        }
    };
    //int main() {
    //    int g1[] = {1, 2, 3};
    //    vector<int> gv1(g1, g1 + sizeof(g1)/sizeof(int));
    //    int s1[] = {1, 1};
    //    vector<int> sv1(s1, s1 + sizeof(s1)/sizeof(int));
    //    cout << Solution().findContentChildren(gv1, sv1) << endl;
    //    int g2[] = {1, 2};
    //    vector<int> gv2(g2, g2 + sizeof(g2)/sizeof(int));
    //    int s2[] = {1, 2, 3};
    //    vector<int> sv2(s2, s2 + sizeof(s2)/sizeof(int));
    //    cout << Solution().findContentChildren(gv2, sv2) << endl;
    //    return 0;
    //}

     

    /// 455. Assign Cookies
    /// https://leetcode.com/problems/assign-cookies/description/
    /// 先尝试满足最不贪心的小朋友
    /// 时间复杂度: O(nlogn)
    /// 空间复杂度: O(1)
    public class Solution2 {
        public int findContentChildren(int[] g, int[] s) {
            Arrays.sort(g);
            Arrays.sort(s);
            int gi = 0, si = 0;
            int res = 0;
            while (gi < g.length && si < s.length) {
                if (s[si] >= g[gi]) {
                    res++;
                    gi++;
                }
                si++;
            }
            return res;
        }
        //public static void main(String[] args) {
        //    int g1[] = {1, 2, 3};
        //    int s1[] = {1, 1};
        //    System.out.println((new Solution2()).findContentChildren(g1, s1));
        //    int g2[] = {1, 2};
        //    int s2[] = {1, 2, 3};
        //    System.out.println((new Solution2()).findContentChildren(g2, s2));
        //}
    }

    392. 判断子序列 

    https://leetcode-cn.com/problems/is-subsequence/

     

    展开全文
  • 贪心算法 贪心算法 贪心算法 贪心算法 贪心算法 贪心算法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,975
精华内容 11,190
关键字:

贪心算法