油价算法什么时候能改变价格_油价什么时候调整一次
1.我想知道队列算法能干什么
一公里多少钱要知道油价,比如92#汽油按照5.6元/升算,那么100公里就是10*5.6=56元钱的油钱,折合成一公里就是0.56元。
当然这么算是按照标准耗油算的,如果是跑高速,一直在经济车速,那么就达不到10个油耗,就会比0.56元便宜;但是如果是市区,道路比较堵,走走停停,或者夏天开空调,那么10个油耗就是最低值,实际一公里的价格就会高于0.56元。
当然这也和车主的驾驶习惯有关系,如果喜欢急停急加速,那么油耗也会增加,一公里的价格也会高于0.56元。
百公里油耗
百公里油耗是厂家在客观环境中,用安装在车辆底盘的测功机测得的值转换为速度参数,再指定速度行驶,计算出车型的理论实验百公里油耗数据。
由于多数车辆在90公里/小时接近经济车速,因此大多数对外公布的理论油耗通常为90公里/小时的百公里油耗。(排气量是通过排气分析仪和碳平衡法分析尾气中碳元素的含量来判断)。
我想知道队列算法能干什么
一桶油到底值多少钱
《粤港信息日报》·王永清
从来自以为是的理性预期分析,这次又犯了同样一个的错误,它对“9·11”之后油价的
预测,像1998年对未来价格走势的分析一样,认真地栽了个跟头。1998年,欧佩克油价
最低时跌到每桶9点几美元,到次年三月仍在10美元左右徘徊,许多经济学家“理性”地预测
:原油价格还将大跌,理由是沙特等阿拉伯原油生产大国不会对欧佩克的减产协议作出反应,而
全球大部分耗油国的储备仍然丰富。还有的人甚至认为油价将跌到5美元以下。但是这些权威的
话音刚落,原油价格在三月底却莫明其妙地应声而起,一周之内大涨30%,至年底冲至25美
元,之后继续高攀,达到33美元,创1991年海湾战争以来的最高纪录。
“9·11”从反面印证了理性主义的失败,恐怖袭击特别是美国对阿富汗塔利班
开战以后,分析家们一致认为油价将因此上涨。油价着实上涨,但瞬间便跌落下来,从25元起
拾级而下,直到现在的每桶17美元,三月之内跌幅逾三成,让行家分析大跌眼镜。油价在过去
三年中的大起大落、桀骜不驯,让人足以怀疑有人在“捣鬼”。但问题是引起非理性起伏的因素
何在?
一桶油到底值多少钱,这里有几种算法。一是成本核算法,据专家测算,一桶油的开成本
只有1美元,加上设备折旧、运输费以及中间利差之后,进入市场的价格也不会超过每桶5美元
,但在过去5年中,每桶原油的平均价格超过了15美元,去年的平均价格为27美元,可见就
算油价跌破了欧佩克制定的最低限价22美元,原油出口国的利润仍高得吓人。
当然不能按地质学的开标准来为原油定价,因为一种商品的价格在很大程度上取决于供求
关系,供求关系的变化会对价格产生直接影响,所以才会有在某些地方或某些时候“水比油贵”
的现象。但是从实际情况来看,供求关系用在这里好象也不合适,因为在过去几年中尽管原油价
格像过山车般起伏不定,但全球对原油的需求却没有大的波动,这足以说明需求曲线在这里不起
作用。
另一种好笑的算法是本·拉丹,他给每一桶油的综合定价是144美元。人们也许忘记,拉
丹恐怖组织几年前曾发表过一份鲜为人知的关于能源经济的“白皮书”,声称美国利用它的军事
力量控制了中东地区的石油价格,对阿拉伯国家的石油巧取豪夺,是“历史上最大的盗贼”
。按照拉丹的算法,美国迄今为止共**石油共36万亿美元,平均到每个穆斯林头上,足有3
万美元之多。
中东成为兵家必争之地,除了战略地位的原因,也由于是能源集中的宝库,它占据目前全球
石油储备的一半。其中沙特阿拉伯一国坐拥全球储备的1/4,富甲天下;其周边的四个邻国各
占了1/10。这是当地石油储备的情况。如果从生产出口来看,情况又会有所不同,这是因为
大多数阿拉伯国家取了限产的措施,并没有尽其所能满负荷“放水”。
欧佩克表面上占据了全球原油出口的四成,但也无法完全控制全球的油价,近年来,非欧佩
克成员国对石油价格的影响虽然有所加强,但由于储量有限,难成气候。所以从长远影响而言,
最终把握“黑金”命脉的,还是中东地区,它的这一能源战略地位,同时也使它在本世纪以来一
直成为是非纷争之地。
石油是不可再生,但在眼前并不稀缺。专家指出目前深埋于地下的石油,足够全球的交
通工具跑上好几十年,也跑不完。所以沙特阿拉伯的石油部长这样说:所有关于全球性的能源危
机、波斯湾危机将危及原油稳定的说法,都是不切实际的危言耸听。这一说法本身不错,它道出
了世界石油丰富的真实状况。问题只是在于能源问题已不在于它的多寡,而在于它们的分布状况
。影响油价的另一个非理性因素在于:世界石油过于集中于少数几个国家和地区,具体地说
主要分布于寸草不生的少数几个波斯湾国家,使得能源供应形成了高位“瓶颈”效应,产生了非
一般能源所具有的“系统内风险”。
这一系统内风险由是导致了另一个“系统外风险”。短期而言“能源危机”远远没有到来,
但由少数几个国家和地区可能带来的非理性预期因素,加大了它的短期风险,例如发生在上个世
纪的“两伊战争”和海湾战争,使全球能源供应在短期内顿趋紧张。这便是由石油分布的地域特
点所形成的巨大的短期系统外风险,当它突然释放的时候会造成能源危机。
有人曾做过计算,美国在90年代一年从中东地区的进口原油价值约100亿美元,但它每
年用于这一地区的安全保护费却高达300至600亿美元。可见,在西方眼中,中东的定价已
超出了“理性预期”的范畴。石油是一种可替代商品,但它目前的价格跟其它替代商品如氢电池
相比仍是价廉物美;石油生产又是一种不可移易的,作为高科技后盾的芯片除了台湾之外,
其它地方随处设厂可造,但石油却不是跑到任何一个荒凉的地方,一钻子下去都会有黑东西冒出
来。这是石油作为一种最重要的战略物资的不可替代性,它决定油价变化的“非理性”,同样也
是合理的。
在“9·11”之后,中东地区的重性再次凸现出来,因为传言本·拉丹也想控制中东
的石油,甚至手中还掌握了核武器,借此威胁美国和西方。能源安全专家们也才开始对他那份所
谓的“白皮书”引起重视,但更多的还是对恐怖组织可能对中东石油构成的威胁提高了警惕。美
国曾设,如果恐怖组织或敌对力量控制了中东的油田,它将派军队前去镇压保护油田。
由是看来,虽然并不是每一次战争都会引起油价狂涨,但它的战略地位确实在其定价中起了
很大作用。所以,尽管在一般人眼里是欧佩克,这个由阿拉伯国家牵头的卡特尔恶意操纵了原油
价格,而实际上它在制定增减产政策的时候也不能不看美国的脸色行事。在过去三年中,原油价
格在欧佩克手中似乎是一个被它玩得眩乎的“溜溜球”,但在这场游戏之中,却从来少不了美国
这只“看不见的手”的染指。
队列是一种先进先出的数据结构,由于这一规则的限制,使得队列有区别于栈等别的数据结构。
作为一种常用的数据结构,同栈一样,是有着丰富的现实背景的。以下是几个典型的例子。
[例5-2] 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(设出发时油箱是空的).给定两个城市之间的距离D1,汽车油箱的容量C(以升为单位),每升汽油能行驶的距离D2,出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di,每升汽油价格Pi(i=1,2,……N).
计算结果四舍五入至小数点后两位.
如果无法到达目的地,则输出"No Solution".
样例:
INPUT
D1=275.6 C=11.9 D2=27.4 P=2.8 N=2
油站号I
离出发点的距离Di
每升汽油价格Pi
1
102.0
2.9
2
220.0
2.2
OUTPUT
26.95(该数据表示最小费用)
[问题分析]
看到这道题,许多人都马上判断出穷举是不可行的,因为数据都是以实数的形式给出的.但是,不用穷举,有什么方法是更好的呢 递推是另一条常见的思路,但是具体方法不甚明朗.
既然没有现成的思路可循,那么先分析一下问题不失为一个好办法.由于汽车是由始向终单向开的,我们最大的麻烦就是无法预知汽车以后对汽油的需求及油价变动;换句话说,前面所买的多余的油只有开到后面才会被发觉.
提出问题是解决的开始.为了着手解决遇到的困难,取得最优方案,那就必须做到两点,即只为用过的汽油付钱;并且只买最便宜的油.如果在以后的行程中发现先前的某些油是不必要的,或是买贵了,我们就会说:"还不如当初不买."由这一个想法,我们可以得到某种启示:设我们在每个站都买了足够多的油,然后在行程中逐步发现哪些油是不必要的,以此修改我们先前的购买,节省资金;进一步说,如果把在各个站加上的油标记为不同的类别,我们只要在用时用那些最便宜的油并为它们付钱,其余的油要么是太贵,要么是多余的,在最终的中会被排除.要注意的是,这里的便宜是对于某一段路程而言的,而不是全程.
[算法设计]由此,我们得到如下算法:从起点起(包括起点),每到一个站都把油箱加满(终点除外);每经过两站之间的距离,都按照从便宜到贵的顺序使用油箱中的油,并计算花费,因为这是在最优方案下不得不用的油;如果当前站的油价低于油箱中仍保存的油价,则说明以前的购买是不够明智的,其效果一定不如购买当前加油站的油,所以,明智的选择是用本站的油代替以前购买的高价油,留待以后使用,由于我们不是真的开车,也没有为备用的油付过钱,因而这样的反悔是可行的;当我们开到终点时,意味着路上的费用已经得到,此时剩余的油就没有用了,可以忽略.
数据结构用一个队列:存放由便宜到贵的各种油,一个头指针指向当前应当使用的油(最便宜的油),尾指针指向当前可能被替换的油(最贵的油).在一路用一路补充的过程中同步修改数据,求得最优方案.
注意:每到一站都要将油加满,以确保在有解的情况下能走完全程.并设出发前油箱里装满了比出发点贵的油,将出发点也看成一站,则程序循环执行换油,用油的操作,直到到达终点站为止.
本题的一个难点在于认识到油箱中油的可更换性,在这里,突破现实生活中的思维模式显得十分重要.
[程序清单]
program ex5_2(input,output);
const max=1000;
type recordtype=record price,content:real end;
var i,j,n,point,tail:longint;
content,change,distance2,money,use:real;
price,distance,consume:array[0..max] of real;
oil:array [0..max] of recordtype;
begin
write('Input DI,C,D2,P:'); readln(distance[0],content,distance2,price[0]);
write('Input N:'); readln(n); distance[n+1]:=distance[0];
for i:=1 to n do
begin
write('Input D[',i,'],','P[',i,']:');
readln(distance[i],price[i])
end;
distance[0]:=0;
for i:=n downto 0 do consume[i]:=(distance[i+1]-distance[i])/distance2;
for i:=0 to n do
if consume[i]>content then
begin writeln('No Solution'); halt end;
money:=0; tail:=1; change:=0;
oil[tail].price:=price[0]*2; oil[tail].content:=content;
for i:=0 to n do
begin
point:=tail;
while (point>=1) and (oil[point].price>=price[i]) do
begin
change:=change+oil[point].content;
point:=point-1
end;
tail:=point+1;
oil[tail].price:=price[i];
oil[tail].content:=change;
use:=consume[i]; point:=1;
while (use>1e-6) and (point=oil[point].content
then begin use:=use-oil[point].content;
money:=money+oil[point].content*oil[point].price;
point:=point+1 end
else begin oil[point].content:=oil[point].content-use;
money:=money+use*oil[point].price;
use:=0 end;
for j:=point to tail do oil[j-point+1]:=oil[j];
tail:=tail-point+1;
change:=consume[i]
end;
writeln(money:0:2)
end.
[例5-3] 分油问题:设有大小不等的3个无刻度的油桶,分别能够存满,X,Y,Z公升油(例如X=80,Y=50,Z=30).初始时,第一个油桶盛满油,第二,三个油桶为空.编程寻找一种最少步骤的分油方式,在某一个油桶上分出targ升油(例如targ=40).若找到解,则将分油方法打印出来;否则打印信息"UNABLE"等字样,表示问题无解.
[问题分析] 这是一个利用队列方法解决分油问题的程序.分油过程中,由于油桶上没有刻度,只能将油桶倒满或者倒空.三个油桶盛满油的总量始终等于开始时的第一个油桶盛满的油量.
[算法设计] 分油程序的算法主要是,每次判断当前油桶是不是可以倒出油,以及其他某个油桶是不是可以倒进油.如果满足以上条件,那么当前油桶的油或全部倒出,或将另一油桶倒满,针对两种不同的情况作不同的处理.
程序中使用一个队列Q,记录每次分油时各个油桶的盛油量和倾倒轨迹有关信息,队列中只记录互不相同的盛油状态(各个油桶的盛油量),如果程序列举出倒油过程的所有不同的盛油状态,经考察全部状态后,未能分出TARG升油的情况,就确定这个倒油问题无解.队列Q通过指针front和rear实现倒油过程的控制.
[程序清单]
program ex5_3(input,output);
const maxn=5000;
type stationtype=array[1..3] of integer;
elementtype=record
station:stationtype;
out,into:1..3;
father:integer
end;
queuetype=array [1..maxn] of elementtype;
var current,born:elementtype;
q:queuetype;
full,w,w1:stationtype;
i,j,k,remain,targ,front,rear:integer;
found:boolean;
procedure addQ(var Q:queuetype;var rear:integer; n:integer; x:elementtype);
begin
if rear=n
then begin writeln('Queue full!'); halt end
else begin rear:=rear+1; Q[rear]:=x end
end;
procedure deleteQ(var Q:queuetype;var front:integer;rear,n:integer;var x:elementtype);
begin
if front=rear
then begin writeln('Queue empty!'); halt end
else begin front:=front+1; x:=Q[front] end
end;
function dup(w:stationtype;rear:integer):boolean;
var i:integer;
begin
i:=1;
while (i<=rear) and ((w[1]q[i].station[1]) or
(w[2]q[i].station[2]) or (w[3]q[i].station[3])) do i:=i+1;
if i0 then
begin
print(q[k].father);
if k>1 then write(q[k].out, ' TO ',q[k].into,' ')
else write(' ':8);
for i:=1 to 3 do write(q[k].station[i]:5);
writeln
end
end;
begin {Main program}
writeln('1: ','2: ','3: ','targ');
readln(full[1],full[2],full[3],targ);
found:=false;
front:=0; rear:=1;
q[1].station[1]:=full[1];
q[1].station[2]:=0;
q[1].station[3]:=0;
q[1].father:=0;
while (front begin
deleteQ(q,front,rear,maxn,current);
w:=current.station;
for i:=1 to 3 do
for j:=1 to 3 do
if (ij) and (w[i]>0) and (w[j]remain
then begin w1[j]:=full[j]; w1[i]:=w[i]-remain end
else begin w1[i]:=0; w1[j]:=w[j]+w[i] end;
if not(dup(w1,rear)) then
begin
born.station:=w1;
born.out:=i;
born.into:=j;
born.father:=front;
addQ(q,rear,maxn,born);
for k:=1 to 3 do
if w1[k]=targ then found:=true
end
end
end;
if not(found)
then writeln('Unable!')
else print(rear)
end.
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。