《Stock Charts》解题报告.docx
- 文档编号:30036022
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:10
- 大小:64.48KB
《Stock Charts》解题报告.docx
《《Stock Charts》解题报告.docx》由会员分享,可在线阅读,更多相关《《Stock Charts》解题报告.docx(10页珍藏版)》请在冰豆网上搜索。
《StockCharts》解题报告
《StockCharts》解题报告
Bysx349
【问题描述】
You'reinthemiddleofwritingyournewspaper'send-of-yeareconomicssummary,andyou'vedecidedthatyouwanttoshowanumberofchartstodemonstratehowdifferentstockshaveperformedoverthecourseofthelastyear.You'vealreadydecidedthatyouwanttoshowthepriceofndifferentstocks,allatthesamekpointsoftheyear.
Asimplechartofonestock'spricewoulddrawlinesbetweenthepoints(0,price0),(1,price1),...,k-1,pricek-1),wherepriceiisthepriceofthestockattheithpointintime.
Inordertosavespace,youhaveinventedtheconceptofanoverlaidchart.Anoverlaidchartisthecombinationofoneormoresimplecharts,andshowsthepricesofmultiplestocks(simplydrawingalineforeachone).Inordertoavoidconfusionbetweenthestocksshowninachart,thelinesinanoverlaidchartmaynotcrossortouch.
Givenalistofnstocks'pricesateachofktimepoints,determinetheminimumnumberofoverlaidchartsyouneedtoshowallofthestocks'prices.
【输入文件】(stock.in)
ThefirstlineofinputwillcontainasingleintegerT,thenumberoftestcases.AfterthiswillfollowTtestcasesondifferentlines,eachoftheform:
nk
price0,0price0,1...price0,k-1
price1,0price1,1...price1,k-1
...
pricen-1,0pricen-1,1...pricen-1,k-1
Wherepricei,jisaninteger,thepriceoftheithstockattimej.
【输出文件】(stock.out)
Foreachtestcase,asinglelinecontaining"Case#X:
Y",whereXisthenumberofthetest-case(1-indexed)andYistheminimumnumberofoverlaidchartsneededtoshowthepricesofallofthestocks.
【数据范围】
1≤T≤100
2≤k≤25
0≤pricei,j≤1000000
1≤n≤100
【输入输出样例】
stock.in
stock.out
3
34
1234
2346
6543
33
555
446
454
52
11
22
54
44
41
Case#1:
2
Case#2:
3
Case#3:
2
【问题分析】
首先不难发现,如果两个股票价格曲线i和j要放在同一张图表当中,那么一定要满足:
因此,我们自然而然地得到了下面这个想法:
以每条曲线作为点,不断枚举两条曲线,如果这两条曲线满足上述要求(即可以放在同一张图表当中),那么就在这两条曲线当中连一条边。
显然,根据构图的方法我们可以发现,边之间没有传递性,存在无向边
和
不一定保证存在无向边
。
但是,我们接下来的任务是把这张图
分成尽可能少的子图
,满足:
这是一个有关任意图的团划分的问题。
团划分数与图的点着色问题有关,而计算后者是很困难的。
(详见【归纳与拓展】中的相关内容)
上面那个想法难以实现,但是给了我们另一个思路:
无向图中的边不能传递,是因为i和j在同一张图表中有两种可能的情况。
由于i和j是任意的,我们可以只在
的情况下(或者称i低于j),由i向j连一条有向边。
这样,我们就构成了一张有向无环图。
如果要把一系列曲线放在同一张图表中,那么,这些曲线一定可以按照前一个低于后一个的顺序排列出来,形成上述有向无环图中的一条路径。
显然的,问题就被转化为有向无环图的最小路径覆盖问题。
而有向无环图的最小路径覆盖问题是可以用二分图的最大匹配算法来解决。
具体的转化方法如下:
对于每一条路径而言,总有:
路径上的点数=路径上的边数+1
对于一个路径数为K的最小路径覆盖,则有:
所有路径上的总点数=所有路径上的总边数+K
也即K=图
中的总点数-路径上的总边数
要使K尽可能的小,则要路径上的总边数尽可能的多。
问题就进一步转化为求路径上总边数的最大值。
我们重新构一张图,将原图中的每个点
拆成
和
加入新的图中,对于任意一条有向边
,我们在新的图中加入一条边
。
显然,原图的一个路径覆盖所选择的边与新图上可以一一对应,数量不变。
由于每一个顶点在路径覆盖中只能够进入一次、出去一次,因此在新图中,每一个点至多只会连有一条边;另一方面,所有的
之间不会有连边,所有的
之间也不会连边,可见新图是一张二分图。
因此,将原图的一个路径覆盖转移到新图上一定是一个二分图匹配。
对新图求二分图最大匹配数,就对应了原图的路径覆盖的最大边数。
【算法实现】
按照二分图最大匹配的算法,将原图中的N条曲线构成左侧N个结点和右侧N个节点。
枚举i和j,如果曲线i低于曲线j,那么从左侧的第i个节点引一条边到右侧的第j个节点。
然后用匈牙利算法求得这张图的最大匹配数K,则最后答案即为N-K。
时间复杂度:
空间复杂度:
【归纳与拓展】
最小路径覆盖(pathcovering)
是“路径”覆盖“点”,即用尽量少的不相交简单路径覆盖有向无环图G的所有顶点,即每个顶点严格属于一条路径。
路径的长度可能为0(单个点)。
最小路径覆盖数=G的点数-最小路径覆盖中的边数。
应该使得最小路径覆盖中的边数尽量多,但是又不能让两条边在同一个顶点相交。
拆点:
将每一个顶点i拆成两个顶点Xi和Yi。
然后根据原图中边的信息,从X部往Y部引边。
所有边的方向都是由X部到Y部。
因此,所转化出的二分图的最大匹配数则是原图G中最小路径覆盖上的边数。
因此由最小路径覆盖数=原图G的顶点数-二分图的最大匹配数便可以得解。
——摘自《图论总结》ByAmber
图的着色
在本节中,我们来考虑一个有趣的问题:
图的着色。
点着色问题给图G的每个顶点着一种颜色。
任意两个相邻顶点必须着不同的颜色。
最少需要几种颜色?
…………
对于问题一,为了叙述方便,引入记号
表示问题一的解,称为图G的“色数”。
还可以用另外一种形式来叙述问题一:
“把图G的项点集划成数目最少的子集
,使得每个子集的导出子图都是零图”。
我们不加证明地给出色数的如下性质:
性质1:
对于有n个顶点的图G,1≤
≤n
左边的等号当且仪当G为零图成立,右边的等号当且仅当G为完全图时成立
性质2:
如果图G最大阶数的导出零图包含q个结点,则
≥
性质3:
设图G至少有一条边,则
当且仅当G为二分图时成立
性质4:
设图G的顶点中最大的度数为
,则
性质4是可以改进的。
奇数阶循环图中
=3,
=2;完全图中
=
+1=n
性质5:
设简单图G不是完全图也不是奇数阶循环图,则
性质6:
若
是个简单图,则
从上面的性质中可以看出,求色数是很困难的(否则会直接给出—个好的结论,而不用给出这么多并不好的上界和下界),关于它的一些讨论也是困难的。
不过正因为这—点,有关色数的研究是很多的。
在本小节下面引入了“团”的概念以后,还将继续讨论色数,并定义一种类型的图,叫做“完美图”。
——摘自《算法艺术与信息学竞赛》2.4.1.2图的着色
团划分
前面说过,顶点着色实际上是把顶点集划分成独立集。
既然独立集和团又是互补的概念,则可建立顶点着色的互补概念:
团划分,即把顶点集划分成团。
G中—个团划分的最小团数定义为G的团划分数,用
表示。
这样,有类似(*)的式子:
(注:
表示图G的色数,
表示团划分数,)
进一步,还有两个互补的式子:
(注:
表示图的团数(最大团顶点数),
表示图的独立数(最大独立集顶点数))
第一个式子说的是“色数不小于团数”。
它显然成立,因为最大的团里面的所有点必须着不同的颜色;第二个式子说的是“团划分数不小于独立数”。
它显然也成立,因为最大独立集中的每个元素必须属于不同的团。
我们很自然的提出这样的问题:
对于什么样的图
(1)式的等号成立,对于什么样的图
(2)式的等号成立呢?
我们渴望让两个等式成立的图有什么惊人的性质。
可惜,这个问题的答案并不令人满意。
随便取一个图H,设它的色数为p,那么它的团数不大于p,不过只要再选一个完全图Kp,把它和H看成一个大团G的两个连通分量,那么由于Kp的存在,G的团数为p,而色数等于H的色数p。
这样,一个由任意图H和一个阶数等于H的色数的图组合起来的图都让
(1)式的等号成立,而并不需要具有什么特别的性质。
因此,我们把条件加强一下,规定G的任意导出子图都必须让某个等号成立,期望满足它的图能够特殊一些。
也可用以下概念来解释:
完美图
如果图G的任意导出子图都满足
,我们说G是χ-完美的.如果图G的任意导出子图都满足
,我们说G是θ-完美的。
从两个角度定义出两个完美图,总是有些遗憾的,好在有如下定理:
图G是χ-完美的当且仅当它是θ-完美的。
等价地,G是χ-完美的当且仅当G的补图是χ-完美的。
这样,把两种完美图合并起来,统称完美图(perfectgraph)。
它们让
(1),
(2)的等号同时成立。
两类完美图
完美图是存在的。
进一步地,可以证明有一大类图都是完美图。
这类图就是弦图(chordalgraph)。
所谓弦图,就是指任何长度大于3的圈都有弦(连接圈内不相邻的两个点的边)的图。
它的一种特殊情况是区间图(intervalgraph),它也是非常重要的一类特殊图,稍后我们会继续讨论这两类图。
——摘自《算法艺术与信息学竞赛》2.4.1.3独立集,团,完美图
【PASCAL参考程序】
//Program:
StockCharts
//PROG:
stock
//LANG:
PASCAL
ProgramStock;
Var
T,TT,N,K,I,J,E,S:
Longint;
L:
Array[0..110]ofLongint;
C:
Array[0..110]ofBoolean;
F:
Array[0..110,0..110]ofBoolean;
Price:
Array[0..110,0..30]ofLongint;
FunctionCheck(A,B:
Longint):
Boolean;
Var
I:
Longint;
Begin
ForI:
=1toKdo
IfPrice[A,I] ElseExit(False); Exit(True); End; FunctionFind(I: Longint): Boolean; Var J: Longint; Begin ForJ: =1toNdo IfF[I,J]and(NotC[J])ThenBegin C[J]: =True; If(L[J]=0)orFind(L[J])ThenBegin L[J]: =I; Exit(True);; End; End; Exit(False); End; Begin Assign(Input,'stock.in'); Assign(Output,'stock.out'); Reset(Input); Rewrite(Output); Read(T); ForTT: =1toTdoBegin Read(N,K); ForI: =1toNdo ForJ: =1toKdo Read(Price[I,J]); ForI: =1toNdo ForJ: =1toNdoBegin F[I,J]: =Check(I,J); End; S: =0; Fillchar(L,Sizeof(L),0); ForI: =1toNdoBegin Fillchar(C,Sizeof(C),0); IfFind(I)ThenS: =S+1; End; Writeln(N-S); End; Close(Input); Close(Output); End.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Stock Charts Stock Charts解题报告 Stock Charts 解题 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)