📄 贪心算法解决磁盘文件最优存储问题-一品浓茶 - 新浪blog.htm
字号:
class="toggleLink collapseArraw center" id=collapseButton title=展开或收缩模块
href="javascript:void(0)"
toggle="componentContent"><INPUT type=button></A><SPAN
id=titleText>访客</SPAN> </TD>
<TD class=componentMenu id=componentMenu><A
class="icon refresh center invisible" id=refreshCompButton
href="javascript:void(0)"> </A> <A
class="adminComp center invisible" id=adminCompButton
href="javascript:void(0)"></A><A class="closeComp center invisible"
id=closeCompButton title=隐藏模块 href="javascript:void(0)"><INPUT type=button></A> </TD></TR></TBODY></TABLE>
<DIV class=componentHead id=componentHead></DIV>
<DIV class=ccomponentTip id=componentTip></DIV>
<DIV class=componentContent id=componentContent>
<DIV class=componentDef type="dynamic"
data="http://util.blog.sina.com.cn/rr?1240064164&n"></DIV></DIV><!--componentContent-->
<DIV class=componentFooter></DIV><!--componentFooter--></DIV></DIV><!-- add dbid attribute. by xp 07.07.05 --><!-- add adminCompButton. chaoliang 7.7.29 -->
<DIV class="component withTitleBar" id=blog_toparticlesort dbid="">
<DIV class=componentInnderBorder>
<DIV class=componentSpecialArea id=componentSpecialArea></DIV>
<TABLE class="componentBar layout" id=componentBar>
<TBODY>
<TR>
<TD class=componentTitle id=componentTitle><A
class="toggleLink collapseArraw center" id=collapseButton title=展开或收缩模块
href="javascript:void(0)"
toggle="componentContent"><INPUT type=button></A><SPAN
id=titleText>新浪博客推荐文章</SPAN> </TD>
<TD class=componentMenu id=componentMenu><A
class="icon refresh center invisible" id=refreshCompButton
href="javascript:;"> </A> <A class="adminComp center invisible"
id=adminCompButton href="javascript:void(0)">管理</A><A
class="closeComp center invisible" id=closeCompButton title=隐藏模块
href="javascript:void(0)"><INPUT type=button></A> </TD></TR></TBODY></TABLE>
<DIV class=componentHead id=componentHead></DIV>
<DIV class=ccomponentTip id=componentTip></DIV>
<DIV class=componentContent id=componentContent>
<SCRIPT
src="贪心算法解决磁盘文件最优存储问题-一品浓茶 - 新浪BLOG.files/toparticlesort_113.js"></SCRIPT>
</DIV><!--componentContent-->
<DIV class=componentFooter></DIV><!--componentFooter--></DIV></DIV><!-- {$box_2}--></DIV><!--column_1--><!--gap is reserved for further usage such as munipulating page layout.-->
<DIV class=floatLeft id=gap_1></DIV>
<DIV class=floatLeft id=column_2><!-- add dbid attribute. by xp 07.07.05 --><!-- add adminCompButton. chaoliang 7.7.29 -->
<DIV class="component " id=blog_feeds dbid="">
<DIV class=componentInnderBorder>
<DIV class=componentSpecialArea id=componentSpecialArea></DIV>
<TABLE class="componentBar layout" id=componentBar>
<TBODY>
<TR>
<TD class=componentTitle id=componentTitle><A
class="toggleLink collapseArraw center" id=collapseButton title=展开或收缩模块
href="javascript:void(0)"
toggle="componentContent"><INPUT type=button></A><SPAN
id=titleText>内容</SPAN> </TD>
<TD class=componentMenu id=componentMenu><A
class="icon refresh center invisible" id=refreshCompButton
href="javascript:;"> </A> <A class="adminComp center invisible"
id=adminCompButton href="javascript:void(0)">管理</A><A
class="closeComp center invisible" id=closeCompButton title=隐藏模块
href="javascript:void(0)"><INPUT type=button></A> </TD></TR></TBODY></TABLE>
<DIV class=componentHead id=componentHead></DIV>
<DIV class=ccomponentTip id=componentTip></DIV>
<DIV class=componentContent id=componentContent>
<DIV id=adminLinks>
<DIV id=loadingText>数据加载中...</DIV>
<DIV class=invisible id=guestPanel><A
href="http://my2008.sina.com.cn/blog/index.shtml"
target=_blank>写博客,参与“我的2008--我记录活动”,赢现金大奖!</A> <A
class=textIcon href="http://my.blog.sina.com.cn/member/signup/reg_step1.php"
target=_blank>注册</A>┆<A class=textIcon id=login title=""
href="http://my.blog.sina.com.cn/login/login_top.php"
target=systemIframe>登录</A>┆<A class=textIcon id=newArticle
title=发博文参加“我记录”活动,赢取大奖
href="http://my.blog.sina.com.cn/writing/scriber/article_add.php?mode=1"
target=_blank>发表文章</A> </DIV></DIV>
<SCRIPT type=text/javascript> var isCommentAllowedBySystem = true;</SCRIPT>
<UL id=articleContainer>
<LI>
<DIV class=toggleLink id=articleBar toggle="articleContentArea">
<DIV class=article_info><A class="toggleLink collapseArraw center"
id=collapseButton title=展开或收缩 href="javascript:void(0)"
toggle="articleContentArea"><INPUT type=button></A> <!--Class name of articleTime specify 'sun' icon or 'moon' icon in front of date-time text. Corresponding to class name 'sun' & 'moon' -->
<DIV class=articleTitleW><A id=articleTitle>贪心算法解决磁盘文件最优存储问题</A> </DIV></DIV>
<DIV id=articleBarButton><A class="Link icon modify center invisible" id=edit
href="javascript:void(0)"> </A> <A
class="Link icon delete center invisible" id=delete
href="javascript:void(0)"> </A> </DIV></DIV>
<DIV id=articleContentArea>
<DIV id=articleTimeHolder><SPAN class="sun icon textIcon" id=articleTime
style="BACKGROUND-POSITION: 2px 3px">2007-08-13 07:54:12</SPAN> </DIV>
<DIV id=articleContentFontSize><A onclick="setArticleContentSize('b')"
href="javascript:%20void(0);">大</A> <A onclick="setArticleContentSize('m')"
href="javascript:%20void(0);" )>中</A> <A onclick="setArticleContentSize('s')"
href="javascript:%20void(0);" )>小</A> </DIV>
<DIV id=tagsArea>标签:<A class=tag
href="http://search.blog.sina.com.cn/blog/search?q=it%2F%BF%C6%BC%BC&tag=n&t=tag"
target=_blank>it/科技</A> <A class=tag
href="http://search.blog.sina.com.cn/blog/search?q=%CC%B0%D0%C4%CB%E3%B7%A8&tag=n&t=tag"
target=_blank>贪心算法</A> <A class=tag
href="http://search.blog.sina.com.cn/blog/search?q=%B4%C5%C5%CC&tag=n&t=tag"
target=_blank>磁盘</A> </DIV>
<DIV class=middleSize id=articleContent>
<DIV>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体">郁闷了</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">3</SPAN><SPAN
style="FONT-FAMILY: 宋体">天,终于把这算法写出来了,回过头在看着算法,其实十分简单,书上的代码也是,仔细看看,那些乱七八糟的代码挺容易理解的。小弟初学算法,</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">c++</SPAN><SPAN
style="FONT-FAMILY: 宋体">也是半桶水,欢迎高手大虾不吝赐教。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.1pt; TEXT-ALIGN: center"
align=center><B><SPAN style="FONT-FAMILY: 宋体">贪心算法解决磁盘最优存储问题</SPAN></B></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体">问题描述:</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体">设磁盘上有</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">n</SPAN><SPAN style="FONT-FAMILY: 宋体">个文件,</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">f1,f2,</SPAN><SPAN
style="FONT-FAMILY: 宋体">…</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">,fn</SPAN><SPAN
style="FONT-FAMILY: 宋体">,,每个文件占磁盘上</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">1</SPAN><SPAN style="FONT-FAMILY: 宋体">个磁道。这</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">n</SPAN><SPAN
style="FONT-FAMILY: 宋体">个文件的检索概率分别是</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">p1,p2,</SPAN><SPAN style="FONT-FAMILY: 宋体">…</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">,pn,</SPAN><SPAN
style="FONT-FAMILY: 宋体">且</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">p1+p2+</SPAN><SPAN style="FONT-FAMILY: 宋体">…</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">+pn<SPAN> </SPAN> =1</SPAN><SPAN
style="FONT-FAMILY: 宋体">。磁头从当前磁道移到被检信息磁道所需的时间可用这</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">2<SPAN> </SPAN></SPAN> <SPAN
style="FONT-FAMILY: 宋体">个磁道之间的径向距离来度量。如果文件</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">pi</SPAN><SPAN style="FONT-FAMILY: 宋体">存放在第</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">i</SPAN><SPAN
style="FONT-FAMILY: 宋体">道上</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">,<SPAN> </SPAN></SPAN> <SPAN
style="FONT-FAMILY: 宋体">,则检索这</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">n<SPAN> </SPAN></SPAN> <SPAN
style="FONT-FAMILY: 宋体">个文件的期望时间是,</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">sum(</SPAN><SPAN style="FONT-FAMILY: 宋体"> </SPAN><SPAN
lang=EN-US XML:LANG="EN-US">pi*pj*d(i,j)</SPAN><SPAN
style="FONT-FAMILY: 宋体"> </SPAN><SPAN lang=EN-US
XML:LANG="EN-US">),</SPAN><SPAN style="FONT-FAMILY: 宋体">其中</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">1<=i<j<=n</SPAN> <SPAN
style="FONT-FAMILY: 宋体">,</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">d(I,j)</SPAN><SPAN style="FONT-FAMILY: 宋体">是第</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">i</SPAN><SPAN
style="FONT-FAMILY: 宋体">道与第</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">j</SPAN><SPAN style="FONT-FAMILY: 宋体">道之间的径向距离</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">|i-j|</SPAN><SPAN
style="FONT-FAMILY: 宋体">。</SPAN><SPAN lang=EN-US
XML:LANG="EN-US"><SPAN> </SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体">思路:</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体">如何确定这</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">n<SPAN> </SPAN></SPAN> <SPAN
style="FONT-FAMILY: 宋体">个文件在磁盘上的存储位置,使期望检索时间达到最小。设计一个解此问题的算法,并分析算法的正确性与计算复杂性。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体">如果对任何</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">i</SPAN><SPAN style="FONT-FAMILY: 宋体">,</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">j</SPAN><SPAN
style="FONT-FAMILY: 宋体">,当</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">i<>j</SPAN><SPAN style="FONT-FAMILY: 宋体">时,</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">pi<>pj</SPAN><SPAN
style="FONT-FAMILY: 宋体">,则</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">n</SPAN><SPAN style="FONT-FAMILY: 宋体">个文件在磁盘上将有</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">N!</SPAN><SPAN
style="FONT-FAMILY: 宋体">种不同的存储方式。如果考虑到</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">f1</SPAN><SPAN style="FONT-FAMILY: 宋体">,</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">f2</SPAN><SPAN
style="FONT-FAMILY: 宋体">……</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">fn</SPAN><SPAN style="FONT-FAMILY: 宋体">,这种排列方式与</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">fn</SPAN><SPAN
style="FONT-FAMILY: 宋体">……</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">f1</SPAN><SPAN
style="FONT-FAMILY: 宋体">排列的期望检索时间相等,则要计算</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">n!/2</SPAN><SPAN style="FONT-FAMILY: 宋体">种不同的盘列方式。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体">对于指定的</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">i</SPAN><SPAN style="FONT-FAMILY: 宋体">和</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">j</SPAN><SPAN
style="FONT-FAMILY: 宋体">,</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">pi</SPAN><SPAN style="FONT-FAMILY: 宋体">和</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">pj</SPAN><SPAN
style="FONT-FAMILY: 宋体">是不变的,可变因子是</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">d(i,j),</SPAN><SPAN style="FONT-FAMILY: 宋体">如果将</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">d(i,j)</SPAN><SPAN
style="FONT-FAMILY: 宋体">视为一个元素恒定的集合,则他们与排列顺序无关。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体">采用谈心算法将文件</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">f1</SPAN><SPAN style="FONT-FAMILY: 宋体">放到中心磁道上,</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">f2</SPAN><SPAN
style="FONT-FAMILY: 宋体">,</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">f3</SPAN><SPAN style="FONT-FAMILY: 宋体">分别靠着</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">f1</SPAN><SPAN
style="FONT-FAMILY: 宋体">的左右磁道,</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">f4</SPAN><SPAN style="FONT-FAMILY: 宋体">在</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">f2</SPAN><SPAN
style="FONT-FAMILY: 宋体">右边……应该是最佳方案。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN
style="FONT-FAMILY: 宋体">简单</SPAN><SPAN lang=EN-US
XML:LANG="EN-US">C++</SPAN><SPAN
style="FONT-FAMILY: 宋体">算法代码:时间复杂度为nlogn</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US
XML:LANG="EN-US">void GreedySearch(int n,double* p,int& x)</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US
XML:LANG="EN-US">{//p</SPAN><SPAN style="FONT-FAMILY: 宋体">为概率,</SPAN><SPAN
lang=EN-US XML:LANG="EN-US">x</SPAN><SPAN
style="FONT-FAMILY: 宋体">作为文件排列结果</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US
XML:LANG="EN-US"><SPAN> </SPAN> int
k[];</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US
XML:LANG="EN-US"><SPAN> </SPAN> int
r,l;</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt"><SPAN lang=EN-US
XML:LANG="EN-US"><SPAN> </SPAN></SPAN>
<SPAN style="FONT-FAMILY: 宋体">将</SPAN><SPAN lang=EN-US
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -