«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告

本站技术贴除标明为“原创”的之外,其余均为网上转载,文中我会尽量保留原作者姓名,若有侵权请与我联系,我将第一时间做出修改。谢谢!

             ——既瑜


天气预报(南京)


我的分类(专题)

首页(183)
【趣味文摘】(22)
【五子连珠】(13)
【技术文档】(136)
【电脑技术】(6)
【疑难问题】(1)
【我的心情】(5)


最新日志
花语(中英文对照版)
各种花的花语
NTFS格式的7个精彩问答(pconli
童言无忌,有趣得一蹋
给MM修电脑的三个步骤[转载]
J2EE 面试题综合
JAVA编程规则
[转] P2P之UDP穿透NAT的原理与
[转]词法分析器
文件加密技术
一个让人发狂的PI求解C程序
[转]直线生成算法之DDA
[转]利用内核对象----互斥量实现应用
[转]如何正确的计算文件收发进度
双机调试VC程序
[转]分治法优化大整数乘法 C++实现
浮点数值的内存结构
[转]双链表实现大整数的加法与乘法[VC
拜占廷将军问题[转]
某人的挂QQ的程序源代码,虽然没用了,拿

最新回复
回复:vc中的CString的操作
回复:[转]分治法优化大整数乘法 C++
回复:[转]分治法优化大整数乘法 C++
回复:花语(中英文对照版)
回复:基本排序算法比较与选择[转载]
回复:c++中强制类型转换操作符小结
回复:c++中强制类型转换操作符小结
何必那么执着于是大头猫还是愤怒的小鸟,淡
回复:浮点数值的内存结构
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:32位位图到24位位图的转换
dren, ages 16 and 20
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:各种花的花语

留言板
签写新留言

不是0-1背包喔
桂花的花语``
谢谢
提议
提议

统计
blog名称:★既瑜★
日志总数:183
评论数量:636
留言数量:-25
访问次数:1406274
建立时间:2005年3月12日

链接


http://www.nju.edu.cn
http://bbs.nju.edu.cn 
http://www.t7-online.com
http://www.csdn.net
http://www.91f.net
http://www.crsky.com
我的MSN BLOG 

联系我

  OICQ:215768265
  njucs2001@hotmail.com
  erichoo1982@gmail.com

 

W3CHINA Blog首页    管理页面    写新日志    退出


[【技术文档】]算法连载(1)--贪心法之背包问题[转载]
既瑜(224499) 发表于 2005/4/15 11:51:44

贪心方法:总是对当前的问题作最好的选择,也就是局部寻优。最后得到整体最优。 应用:1:该问题可以通过“局部寻优”逐步过渡到“整体最优”。贪心选择性质与“动态规划”的主要差别。 2:最优子结构性质:某个问题的整体最优解包含了“子”问题的最优解。 代码如下: #include <iostream.h> struct goodinfo{ float p; //物品效益 float w; //物品重量 float X; //物品该放的数量 int flag; //物品编号};//物品信息结构体 void Insertionsort(goodinfo goods[],int n){ int j,i; for(j=2;j<=n;j++) {  goods[0]=goods[j];     i=j-1;     while (goods[0].p>goods[i].p)  {   goods[i+1]=goods[i];   i--;  }  goods[i+1]=goods[0]; } }//按物品效益,重量比值做升序排列 void bag(goodinfo goods[],float M,int n){   float cu; int i,j; for(i=1;i<=n;i++)  goods[i].X=0; cu=M;  //背包剩余容量 for(i=1;i<n;i++) {  if(goods[i].w>cu)//当该物品重量大与剩余容量跳出   break;     goods[i].X=1;   cu=cu-goods[i].w;//确定背包新的剩余容量 } if(i<=n)  goods[i].X=cu/goods[i].w;//该物品所要放的量 /*按物品编号做降序排列*/  for(j=2;j<=n;j++) {  goods[0]=goods[j];     i=j-1;     while (goods[0].flag<goods[i].flag)  {   goods[i+1]=goods[i];   i--;  }  goods[i+1]=goods[0]; }/////////////////////////////////////////// cout<<"最优解为:"<<endl; for(i=1;i<=n;i++) {  cout<<"第"<<i<<"件物品要放:";  cout<<goods[i].X<<endl; } } void main(){  cout<<"|--------运用贪心法解背包问题---------|"<<endl; cout<<"|---power by zhanjiantao(028054115)---|"<<endl; cout<<"|-------------------------------------|"<<endl; int j; int n; float M; goodinfo *goods;//定义一个指针 while(j) { cout<<"请输入物品的总数量:"; cin>>n; goods=new struct goodinfo [n+1];// cout<<"请输入背包的最大容量:"; cin>>M; cout<<endl; int i; for(i=1;i<=n;i++)  { goods[i].flag=i;   cout<<"请输入第"<<i<<"件物品的重量:";   cin>>goods[i].w;   cout<<"请输入第"<<i<<"件物品的效益:";   cin>>goods[i].p;   goods[i].p=goods[i].p/goods[i].w;//得出物品的效益,重量比   cout<<endl;     }   Insertionsort(goods,n); bag(goods,M,n); cout<<"press <1> to run agian"<<endl; cout<<"press <0> to exit"<<endl; cin>>j; }}

阅读全文(15896) | 回复(4) | 编辑 | 精华

回复:算法连载(1)--贪心法之背包问题[转载]
anny(游客)发表评论于2007/5/12 15:38:07

請問背包問題(不是0-1背包喔)的時間複雜度是多少呢

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

回复:算法连载(1)--贪心法之背包问题[转载]
sherlockhua(游客)发表评论于2007/4/7 10:03:12

#include<stdio.h>#include<stdlib.h>#define Max 100/*定义栈结构*/typedef struct list{ int data[Max]; int top;}Seqstack; /*定义一个用来存储结果的链表*/typedef struct List{ Seqstack result; struct List * Next;}Seqlist,*Pointer; void Inicial_List(Pointer p){ p=(Pointer)malloc(sizeof(Seqlist)); p->Next=NULL;} Seqstack Push_Stack(int n,Seqstack s){ s.top++; s.data[s.top]=n; return s;}int Add_Stack(Seqstack s){   int total=0,i;   if(s.top>=0)   {   for(i=0;i<=s.top;i++) total+=s.data[i];   }   else   { total=0;   }   return total;}Seqstack Pop_Stack(Seqstack s){  printf("%d",s.data[s.top]); if(s.top>=0) s.top--; return s;}/*执行回溯操作的函数*//*参数说明:n->数的总的个数,a[]用来存放数的数组,k查找的总体积*/Pointer Query_Result(int n,int b[],int k){ int i,j; Seqstack mystack; Seqlist *newnode; Pointer r,p=NULL; Inicial_List(p); r=p; for(i=0;i<n;i++) {  mystack.top=-1;   j=i;  while(j<n)  {    if(Add_Stack(mystack)+b[j]<k)   {    mystack=Push_Stack(b[j],mystack);     j++;   }   else if(Add_Stack(mystack)+b[j]==k)   {    mystack=Push_Stack(b[j],mystack);    newnode=(Pointer)malloc(sizeof(Seqlist));    newnode->result=mystack;    newnode->Next=NULL;    r->Next=newnode;    r=newnode;    mystack=Pop_Stack(mystack);    j++;    }   else if(Add_Stack(mystack)+b[j]>k)   {     j++;   }  }  } return p;} void Print_List(Pointer p){ int i,j=0; p=p->Next; printf("welcome the outer\n"); if(p==NULL)printf("there no results\n"); while(p!=NULL) {   j++;  printf("the %d result is: ",j);  for(i=0;i<=p->result.top;i++)  {    printf(" %d",p->result.data[i]);  }  p=p->Next;  printf("\n"); } printf("\n");}void Sort_Array(int b[],int n){ int i,j,temp; for(i=0;i<n;i++) {  for(j=0;j<n-i;j++)  {      if(b[j]<b[j+1])      {   temp=b[j];   b[j]=b[j+1];   b[j+1]=temp;      }  } } }void main(){ int i,n,k,select,a[Max]; Pointer head; printf("******************************************\n"); printf("1 start\n2 exit\n");  scanf("%d",&select);   while(select==1)  {   printf("please input the total products\n");   scanf("%d",&n);   printf("please input the volumn of n products\n");   for(i=0;i<n;i++)   {    printf("please input the %d integers",i+1);    scanf("%d",&a[i]);   }   printf("\n");   printf("please input the volunm to put\n");   scanf("%d",&k);   Sort_Array(a,n);   head=Query_Result(n,a,k);   Print_List(head);   printf("******************************************\n");   printf("1 start\n2 exit\n");   scanf("%d",&select);  } }
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

回复:算法连载(1)--贪心法之背包问题[转载]
newrain(游客)发表评论于2007/2/20 7:18:31

既然有两个部分进行排序,为什么不把他单独作为一个函数呢?
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

回复:算法连载(1)--贪心法之背包问题[转载]
CCNU(游客)发表评论于2006/4/17 21:58:39

怎么证明背包问题具有贪心选择性质呀!!!
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

回复:算法连载(1)--贪心法之背包问题[转载]
0(游客)发表评论于2006/4/17 21:57:52

怎么证明背包问题具有贪心选择性质呀!!!
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

回复:算法连载(1)--贪心法之背包问题[转载]
既瑜(224499)发表评论于2005/6/23 10:50:59

应该是的,时间长了不记得了
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

回复:算法连载(1)--贪心法之背包问题[转载]
feifei1225(游客)发表评论于2005/6/21 21:08:13

是完整的程序设计和算法分析吗?
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.094 second(s), page refreshed 144760581 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号