❶ TSP问题的遍历算法和贪心算法有什么区别,为什么不选择遍历算法
所有问题遍历算法的时间复杂度是最高的,但是对于TSP问题来说贪心算法一般是得不到最优解的
❷ 贪心算法中,通常会让证明贪心选择性,请问,证明贪心选择性的实质是什么怎样说明一个问题具有贪心选择呢
一般都是要最省事的比如
设有n中不同面值的硬币,个硬币的面值春雨数组T[1:n]中,现在要用这些面值的硬币来找钱。可以使用的各种面值的硬币个数存于数组Coins[1:n]中。
对任意签署0<=m<=20001,设计一个用最少硬币找钱m的方法。
用贪心算法,先用最大面值的,直到超出之前再改用更小面值的,超出之前再用更更小面值的。。直到正好。这样最少
程序实例
#include<stdio.h>
void main()
{
int m;
int i;
printf("please input m:");
scanf("%d",&m);
int T[6] ={100,50,20,10,5,1};
int coins[6] = {0};
for(i = 0; i < 6; )
{
if(m < T[i])
{
i++;
continue;
}
while(m >= T[i])
{
m -= T[i];
coins[i]++;
}
i++;
}
for(i = 0; i < 6; i++)
if(coins==0)
printf("%-4d有 %-2d张\n",T[i],coins[i]);
printf("\n");
}
❸ 贪心算法的特性
贪婪算法可解决的问题通常大部分都有如下的特性:
⑴随着算法的进行,将积累起其它两个集合:一个包含已经被考虑过并被选出的候选对象,另一个包含已经被考虑过但被丢弃的候选对象。
⑵有一个函数来检查一个候选对象的集合是否提供了问题的解答。该函数不考虑此时的解决方法是否最优。
⑶还有一个函数检查是否一个候选对象的集合是可行的,也即是否可能往该集合上添加更多的候选对象以获得一个解。和上一个函数一样,此时不考虑解决方法的最优性。
⑷选择函数可以指出哪一个剩余的候选对象最有希望构成问题的解。
⑸最后,目标函数给出解的值。
⑹为了解决问题,需要寻找一个构成解的候选对象集合,它可以优化目标函数,贪婪算法一步一步的进行。起初,算法选出的候选对象的集合为空。接下来的每一步中,根据选择函数,算法从剩余候选对象中选出最有希望构成解的对象。如果集合中加上该对象后不可行,那么该对象就被丢弃并不再考虑;否则就加到集合里。每一次都扩充集合,并检查该集合是否构成解。如果贪婪算法正确工作,那么找到的第一个解通常是最优的。
❹ 贪心算法的介绍
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
❺ 使用贪心算法解决活动安排问题时使用什么优先贪心选择策略
贪心选择性质:所求问题的整体最优解可以通过一系列局部最优的选择来得到。
就是说,你需要证明当前问题可以通过选择最好的那个元素(比如01背包,总能够通过选择当前重量最小的物品来得到最优解)来解决问题
证明:(每一步所做的贪心选择最终导致问题的整体最优解)
//基本思路:考察一个问题的最优解,证明可修改该最优解,使得其从贪心选择开始,然后用数学归纳法证明每一步都可以通过贪心选择得到最优解
1,假定首选元素不是贪心选择所要的元素,证明将首元素替换成贪心选择所需元素,依然得到最优解;
2,数学归纳法证明每一步均可通过贪心选择得到最优解
❻ 关于数据挖掘中决策树的知识
在数据挖掘中,有很多的算法是需要我们去学习的,比如决策树算法。在数据挖掘中,决策树能够帮助我们解决更多的问题。当然,关于决策树的概念是有很多的,所以说我们需要多多学习多多总结,这样才能够学会并且学会数据挖掘的知识,在这篇文章中我们就重点为大家介绍一下关于决策树的相关知识。
1.决策树的算法
决策树的算法是以树状结构表示数据分类的结果。一般情况,一棵决策树包含一个根节点、若干个内部结点和若干个叶结点。而叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集,从根结点到每个叶结点的路径对应了一个判定测试序列。决策树学习的目的就是为了产生一棵泛化能力强,即能处理未见示例能力强的决策树。这些就是决策树算法的结构。
2.决策树的原理
一般来说,决策树归纳的基本算法是贪心算法,自顶向下以递归方式构造决策树。而贪心算法在每一步选择中都采取在当前状态下最优的选择。在决策树生成过程中,划分选择即属性选择度量是关键。通过属性选择度量,选择出最好的将样本分类的属性。这样就能够方便数据属性的划分,然后,下一步是树的剪枝。在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,这样才能够使用决策树解决很多的问题。而分类是数据挖掘中的一种应用方法,而决策树则是一种典型的普遍使用的分类方法,并且决策树技术早已被证明是利用计算机模拟人决策的有效方法。
3.决策树的现状
近年来随着信息技术、计算机科学的迅速发展,决策树作为重要方法之一,越来越受到人们的关注。而其在人工智能方面的潜力以及与越来越多新技术的结合,由此可见,决策树在数据挖掘乃至数据分析中还是有很长的使用时间,这就是决策树至今经典的原因。
在这篇文章中我们给大家介绍了关于数据挖掘中决策树的知识,当大家学习了决策树的概念,决策树的结构以决策树的原理,就能够掌握决策树的基础知识。不过要想学习数据挖掘,还是要学习更多的知识,希望这篇文章能够帮助到大家。
❼ 贪心算法选择问题
题目:学校出去春游啦 输入春游的人数N 已知有单车B辆(B>=N) 再输入学校给大家共经费A元
设每个人都带了钱 带的钱是M1,M2,M3······MN 且大家帮自己的钱给别人 只能共用经费A元 再输入每辆单车的价钱 :C1,C2,C3······CB 求最多能有几个人能骑上单车
这题我们用的就是贪心算法
程序如下
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<iomanip>
#defineMAXN10000
usingnamespacestd;
intn,B,A,M[MAXN],C[MAXN],ans,mid;
boolcheck(intnn)
{
intcount=0,i=n-nn+1,j=1;
while(i<=n)
{
if(M[i]>=C[j])
count+=C[j]-M[i];
i++;
j++;
}
returncount-A;
}
intsort(inta[],intn)
{
for(inti=0;i<n;i++)
{
for(intj=0;j<i;j++)
if(a[i]<a[j])
{
inttemp=a[i];a[i]=a[j];a[j]=temp;
}
}
}
intmain()
{
cin>>n>>B>>A;
for(inti=0;i<n;i++)
cin>>M[i];
for(inti=0;i<B;i++)
cin>>C[i];
sort(M,n);
sort(C,B);
intl=0,r=n;
while(l<=r)
{
mid=(l+r)/2;
if(check(mid))
{
ans=mid;
l=mid+1;
}
else
r=mid-1;
}
cout<<ans;
return0;
}