超甜蜜算法
❶ Python贪心算法
所谓贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优加以考虑,它所做出的仅仅是在某种意义上的局部最优解。下面让我们来看一个经典的例题。假设超市的收银柜中有1分、2分、5分、1角、2角、5角、1元的硬币。
顾客结账如果需要找零钱时,收银员希望将最少的硬币数找出给顾客,那么,给定需要找的零钱数目,如何求得最少的硬币数呢?这个找零钱的基本思路:每次都选择面值不超过需要找给顾客的钱最大面值的硬币。
我们可以从面值最大的硬币开始,然后依次递减(图1)。
首先定义列表d存储已有币值。并且定义d_num存储每种币值的数量。通过循环遍历的方法计算出收银员拥有钱的总金额并保存在变量S中,要找的零钱变量为sum。当找零的金_比收银员的总金额多时,无法进行找零,提示报错。要想用的钱币数量最少,我们从面值最大的币值开始遍历。这里也就是我们贪心算法的核心步骤。计算出每种硬币所需要的数量,不断地更新硬币个数与硬币面值,最终获得一个符合要求的组合(图2)。
贪心算法在对问题求解时,不是对所有问题都能得到整体最优解,也不是从整体上去考虑,做出的只是在某种意义上的局部最优解。从面值最大的硬币开始依次递减,寻找可用的方法。一般贪心算法并不能保证是最佳的解决方法,这是因为:总是从局部出发没有从整体考虑,只能确定某些问题是有解的,优点是算法简单。常用来解决求最大值或最小值的问题。来源:电脑报
❷ 求几个算法 拜托了
16源程序:
#include "stdio.h"
#include "math.h"
#define M 50
main()
{int i,j,n,m;
float a[M]={0} ,max,sum=0,w[M],p[M];
printf("please get into the number of goods");
scanf("%d",&n);
printf("please get into the weight w[] and price p[]:");
for(i=0;i<n;i++)
scanf("%f %f",&w[i],&p[i]);
for(i=0;i<n;i++)
printf("w[%d]=%f,p[%d]=%f\n",i,w[i],i,p[i]);
printf("weight\t price\t avgprice\n");
for(i=0;i<n;i++)
{a[i]=p[i]/w[i];
printf("%f\t%f\t%f\n",w[i],p[i],a[i]);
}
printf("Please input bag's weight:");
scanf("%d",&m);
printf("you get the goods into you bag:\n");
printf("weight \t avprice\n");
while(m>0)
{ j=0;
max=a[0];
for(i=0;i<n;i++)
if(a[i]>max) {max=a[i];j=i;}
if(w[j]<m)
{ sum=sum+p[j];
printf("%f\t%f\n",w[j],a[j]);
m=m-w[j];
a[j]=0;
}
else
{ sum=sum+m/w[j]*p[j];
printf("%f\t%f\n",w[j],a[j]);
m=0;
a[j]=0;
}
}
printf("sum=%f",sum);
}
17源程序
#include "stdio.h"
#define N 20
main()
{int i,x1=0,x2=0,x3=0,x4=0,x5=0,x6=0,x7=0;
float n,a[N],sum1=0,sum2;
printf("please get into the goods 'price which consumer had been gotten\n");
for(i=0;i<N;i++)
{scanf("%f",&a[i]);
sum1+=a[i];
if(a[i]==0)break;
}
printf("%.1f\n",sum1);
printf("please get into the consumer had been paid\n");
scanf("%f",&n );
while(n<sum1)
{printf("you money is not enough");
scanf("%f",&n );
}
sum2=n-sum1;
printf("please get into the consumer must pay back\n");
printf("%.1f\n",sum2);
while (sum2>0&&sum2<100)
{if(sum2>=20){x1=x1+1;sum2=sum2-20;}
else if( sum2>=10){x2=x2+1;sum2=sum2-10;}
else if(sum2>=5){x3=x3+1;sum2=sum2-5;}
else if(sum2>=1){x4=x4+1;sum2=sum2-1;}
else if( sum2>=0.5){x5=x5+1;sum2=sum2-0.5;}
else if( sum2>=0.2){x6=x6+1;sum2=sum2-0.2;}
else if( sum2>=0.1){x7=x7+1;sum2=sum2-0.1;}
else sum2=0;
}
printf("you must pay 20 yuan %d\n:",x1);
printf("you must pay 10 yuan %d\n:",x2);
printf("you must pay 5 yuan %d\n:",x3);
printf("you must pay 1 yuan %d\n:",x4);
printf("you must pay 0.5 yuan %d\n:",x5);
printf("you must pay 0.2 yuan %d\n:",x6);
printf("you must pay 0.1 yuan %d\n:",x7);
}
15的参照16题的程序。。。。。有些也要自己练练的
❸ 世界上最复杂的程序算法有哪些
Jump-pointer: 在作LA(v,d)的时候, 如果一层一层的往上搜索很慢. 有没有可能直接跳呢? 比如我们知道LA(u,d) = LA(v,d),如果u是v的一个ancestor. 如果直接储存了LA(u,d), 并且可以在log(n)的时间"跳"到u, 那么只要log n的时间就能找到LA(v,d). 这个算法要用 O(n log n)的preprocess time + O(log n)的time. 每一次跳的距离是上一次的1/2倍.,[这个算法很简单的]。
❹ 有哪些算法惊艳到了你
给一个Streaming的Data,未知长度,要求在Streaming结束后返回N个Data,且是等概率的。在听到这个问题的时候简直惊呆了。如果Streaming长度已知为L,当然对于每一个Data,我生成一个N/L的概率即可。但是长度未知,也即概率未知,怎么可能在Data来的时候判断要不要保留这个Data,还能保证是等概率的……百思不得其解。事后一番研究,才发现了这类算法,算法之简单令人惊叹:首先保留前N个Data,对于后面来的Data以N/i的概率选择是否保留,i为当前Data序号,保留的话在原来保留的N的Data中随机剔除一个。最后返回这N的即可。证明也很容易,奇妙得地方在于在计算概率的时候,出现了很长的,可以前后上下不断约掉的分式。相互约去之后剩下的概率刚好是N/L,L为总长度。简直美妙极了!显然这类算法也非常有用,因为在实际问题中会出现大量需要在Streaming的数据中进行Sample,为下一步处理数据做准备的情形。而这竟然有一个O(L)的算法,真是太惊艳了!
❺ 寻求算法。关于女朋友的问题。
如果你一生里,遇到不到30个,你怎麽算?
如果你一生里,遇到超过30个,你怎麽算?
如果你知道了这种所谓的算法,然后,最终,你发现,她不是那个所谓的‘最优质的质量’,你怎麽办?
如果你知道了这种所谓的算法,然后,最终,你发现,30个都不是最好的,你是否会放弃第30个,而继续‘选’下去?直到你发现。。。。哈哈哈。。。
见过类似的问题:
不要错过眼前的一切。
有一天,柏拉图问老师苏格拉底什么是爱情?老师就让他先到到麦田里去,摘一棵全麦田里最大最金黄的麦穗来,期间只能摘一次,并且只可向前走,不能回头。
柏拉图于是按照老师说的去做了。结果他两手空空的走出了田地。老师问他为什么摘不到?
他说:因为只能摘一次,又不能走回头路,期间即使见到最大最金黄的,因为不知前面是否有更好的,所以没有摘;走到前面时,又发觉总不及之前见到的好,原来最大最金黄的麦穗早已错过了;于是我什么也没摘。
老师说:嗯,这就是“爱情”。
又有一天,柏拉图问他的老师什么是婚姻,他的老师就叫他先到树林里,砍下一棵全树林最大最茂盛、最适合放在家作圣诞树的树。其间同样只能砍一次,以及同样只可以向前走,不能回头。
柏拉图于是照着老师的说话做。今次,他带了一棵普普通通,不是很茂盛,亦不算太差的树回来。老师问他,怎么带这棵普普通通的树回来,他说:“有了上一次经验,当我走到大半路程还两手空空时,看到这棵树也不太差,便砍下来,免得错过了,最后又什么也带不出来。但是走到最后,快出来时,我发现了一颗比我砍得这颗还大的树,不过我已经砍过一次了,所以就把这颗树带回来了。” 呜呜呜。。。
老师说:嗯,“这就是婚姻!”
人生就正如穿越麦田和树林,只走一次,不能回头。要找到属于自己最好的麦穗和大树,你必须要有莫大的勇气去看到最真实的自己。
❻ 贪心算法
平面点集三角剖分的贪心算法要求三角剖分后边的总长度尽可能小。算法的基本思想是将所有的两点间距离从小到大排序,依次序每次取一条三角剖分的边,直至达到要求的边数。以下是两种贪心算法的主要步骤。
3.2.2.1 贪心算法1
第一步:设置一个记录三角剖分中边的数组T。
第二步:计算点集S中所有点对之间的距离d(pi,pj),1≤i,j≤n,i≠j,并且对距离从小到大进行排序,设为d1,d2,…,dn(n-1)/2,相应的线段记为e1,e2,…,en(n-1)/2,将这些线段存储在数组E中。
第三步:从线段集E中取出长度最短的边e1存到T中作为三角剖分的第一条边,此时k=1。
第四步:依次从E中取出长度最短的边ek,与T中已有的边进行求交运算,如果不相交则存到T中,并从E中删除ek。这一步运行到S中没有边为止,即至k=n(n-1)/2。
第五步:输出T。
该算法中,第二步需要计算n(n-1)/2次距离,另外距离排序需要O(n2lgn)次比较。T中元素随第四步循环次数的增加而增加,因此向T中加入一条新边所需要的判定两条线段是否相交的次数也随之增加。如果第四步的前3n-6次循环后已经构成点集的三角剖分,那么第四步循环所需要的判定两条线段是否相交的次数为
1+2+…+3n-7+(3n-6)×(n(n-1)/2-(3n-6))=O(n3)
在常数时间内可以判定两条线段是否相交,因此该算法的时间复杂性为O(n3)。
3.2.2.2 贪心算法2
第一步:求点集的凸壳,设凸壳顶点为p1,p2,…,pm,凸壳的边为e1,e2,…,em。并将凸壳顶点按顺序连接成边的ei加入T(三角剖分的边集合),并且ei的权值被赋为1。凸壳内点的集合为S1={pm+1,pm+2,…,pn}。
第二步:从内部点S1中任取一点pi,求与pi距离最近的点pj,将线段 存入T。
第三步:求与pj距离最近的点(除点pi外),设为pk,并将线段 加入T,并将这些边的权值设为1,而wij、wjk和wki的值加1,即为2。边的权值为2则表示该边为两个三角形共有。
第五步:对权值为1的边(除e1,e2,…,em外)的两个端点分别求与其距离最近的点,并将其连线(得到新的三角形)加入T,新三角形边的权值加1。
第六步:对权值为1的边重复上一步,当一条边被使用一次其权值增加1,直到所有边的权值均为2为止(除e1,e2,…,em外)。
贪心算法2中,第一步耗费O(nlgn);第二步需要计算n-1次距离与n-2次比较;第三步求pk要计算n-2次的距离与n-3次比较;第四步要进行(n-3)×3次的距离计算及(n-4)×3次比较;第五步至多进行n-6次的距离计算与n-7次比较;第六步到第五步的循环次数不超过3n-9;因此整个贪心算法2的时间复杂性为
O(nlgn)+O(n)+O(n)+O(n)+(n-6)×(3n-9)=O(n2)
❼ 情侣间的80个甜蜜方法
情侣间的80个甜蜜方法如下:
1、 在公车上不扶着扶手,只搂着你的腰,偷偷地亲你,在你脸上蹭来蹭去。
(看到这个我想起我以前也这么干过,那时候的他下车后拼命笑,我问怎么了,他说我们旁边坐了个大妈带着一小男孩,我一路就都抱着他,小男孩老盯着我们看,那大妈就拼命地蒙住小孩的眼睛~~~)
2、 在每次小别之后第一次见面都要结结实实的一个拥抱。如果在公众场合,就要你亲亲我的脸,如果没人,就亲嘴巴。
31、 在外人面前夸奖你。
32、 每次你做饭我都吃得饶有兴致,然后主动要求洗碗,当然如果是我做饭你要表现得更加出色。
33、 冬天的时候在家里吃火锅。
34、 一起游泳,锻炼,打球,攒钱买2张健身俱乐部的会员卡。
35、 要一个大大的房间,有阳光、书柜、电脑、羊毛地毯和热茶。
36、 要做一个可以在工作上也给你建议的人,心平气和地讨论,时常叫你刮目相看。
37、 在你工作的时候不打扰你,帮你沏茶,送点心。
38、 加班回来不管多晚都等你一起睡觉。
39、 时常拍大头贴,贴满可以贴的地方。
40、 如果老人愿意,在过年的时候,把双方的老人接到一起。
41、 如果对方和朋友出去玩,自己不能同行的时候,也要乖巧地等待对方回来,毫不抱怨。
42、 在房间里摆满两个人的照片。
43、 家里时常有新鲜的水果,洗干净了摆在桌上,随时都可以取来就啃。
44、 在你下班的时候突然出现在你单位门口,时常想着给你惊喜。
45、 不论走到哪里,都惦记着对方的父母、兄弟姐妹,给他们带礼物。给自己父母买礼物的时候说是对方的主意。
46、 一起选床单和窗帘的颜色,还有家里的每样家具,装修的时候亲自到现场监督。
47、 过年放鞭炮的时候你帮我捂上耳朵。
48、 找一棵树刻上彼此的名字,并圈上一个大大的心。
49、 一起手拉手地走在没有脚印的雪地里,用呵出的白气给对方捂手。
50、 买一套专业的野营装备,至少要使用他们一次。
❽ 技巧算法
2003*1001=(2000+3)*(1000+1)=2000000+3000+2000+3=2005003
用乘法分配律乘出来,应该是很简单了吧
❾ 超几何分布的期望和方差公式是什么
超几何分布期望值的简单公式法,E(X)=(n*M)/N,[其中x是指定样品数,n为样品容量,M为指定样品总数,N为总体中的个体总数],可以直接求出均值。
方差有两种算法:V(X)=(X1-a)^2*P1+(x2-a)^2*P2+...+(Xn-a)*Pn。另一种是V(X)=X1^2*P1+X2^2*P2+...Xn^2*Pn-a^2。
超几何分布简介:
超几何分布是统计学上一种离散概率分布。它描述了从有限N个物件(其中包含M个指定种类的物件)中抽出n个物件,成功抽出该指定种类的物件的次数(不放回)。称为超几何分布,是因为其形式与“超几何函数”的级数展式的系数有关。
超几何分布中的参数是M,N,n,上述超几何分布记作X~H(n,M,N)。
以上内容参考:网络-超几何分布
❿ 一般情侣的甜蜜期是多久
情侣的热恋期一般不会超过一年,当然每对情侣也会因为各种原因而有所不同。
1、因人而异。
每个人的性格不一样,跟别人相处的方式也不一样,有的人能跟自己的男朋友热恋很长时间,但是有的人很快就结束了热恋期。
可能你已经过了热恋期,已经到了厌烦期,但是对方还傻傻的在热恋期。
每个情侣都会经历热恋期和厌烦期,但是有的情侣度过了厌烦期,有的情侣却因为走不过去而选择分手。两个人在一起,不可能天天都是甜甜蜜蜜的,肯定有吵架,有让对方讨厌的地方,但是我们可以改。走过了厌烦期,可能你们就是相守一生的人。