这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【原创】浅谈贪心算法--from漫烂

共5条 1/1 1 跳转至

【原创】浅谈贪心算法--from漫烂

工程师
2023-04-19 18:33:13     打赏

   贪心算法是指在解决问题时,总是选择出就当前情况看来,最好的方案。换个说法就是,贪心算法不是对整体来考虑最优解,而是考虑在某种情况下的局部最优解。

   贪心算法的基本思路是从问题的某一个初始解出发,然后一步一步,每一步都要确保该解在某种意义上是这一步的最优解。每一步只考虑一个满足局部最优的数据。最后直到枚举完所有数据,或者不能再添加算法为止。

   贪心算法的一般解题步骤为:
   1、建立数学模型来面熟问题;

   2、将求解的问题按照要求分解成若干个子问题;

   3、求出每一个子问题的局部最优解;

   4、把每一个子问题的解合成原来问题的一个解。

 

   其实贪心算法在日常生活中也很常见,每一个人也都经历过。比如,在一堆面值不等的钞票中,选取N次,每次只能选取一张钞票,最多可以得到多少价值的钞票?很显然,每一次选取,自然而然地,就会尽可能选取面值最大的那一张钞票,这里就运用到了贪心算法。这里将‘最多可以得到多少价值的钞票’这个总问题分解成‘每一次尽可能选取面值最大的那一张钞票’,最后将每一个子问题的最优解合成原来问题的解。

   举个简单的例子,我们所熟知的选择排序,其实选择的就是贪心算法的策略。

算法如下:

#include<stdio.h>
int main()
{
    int a[10] = { 0 };
    int i, j, temp = 0;
    printf("请输入要比较的值:");
    for (i = 0; i < 10; i++)           //遍历数组给入值
    {
        scanf_s("%d", &a[i]);
    }
    for (i = 0; i < 10 - 1; i++)
    {
        for (j = i + 1; j < 10; j++)
        {
            if (a[i] > a[j])
            {
                temp = a[i];     //交换变量
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
    for (i = 0; i < 10; i++)        //遍历数组输出
    {
        printf("%d\n", a[i]);
    }
    return 0;
}

1.png

它每次从未完成排序的数据中选取最小值,并把最小值放在未完成排序数据的起始位置,直到所有数据完成排序,程序结束。

微信图片_20230419183239.png

今天的分享就到这里!




工程师
2023-04-19 19:28:28     打赏
2楼

感谢楼主的分享,很实用了。


工程师
2023-04-19 19:34:22     打赏
3楼

感谢楼主的分享,很实用了。


助工
2023-05-04 19:12:12     打赏
4楼

谢谢分享,学习了


高工
2023-05-12 17:16:37     打赏
5楼

感谢楼主的分享,很实用了。


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]