【蓝桥杯考前一天总结PYthon终结篇】
最短路之Floyd:
適用領(lǐng)域:既可以是有向圖也可以是無(wú)向圖,權(quán)重可以為負(fù),通常用來(lái)求各頂點(diǎn)之間的距離(多源)
缺點(diǎn)就是時(shí)間復(fù)雜度高,加上Python本身跑得慢....就祈禱這次題數(shù)據(jù)量不要太大
優(yōu)點(diǎn)就是比起狄克斯特拉算法,簡(jiǎn)單地多,代碼量少,容易上手
板子:
n=int(input())#這個(gè)根據(jù)題意設(shè)置,表示結(jié)點(diǎn)個(gè)數(shù)edge=[[float('inf')]*n for i in range(n)] #初始化所有邊權(quán)為無(wú)窮大#根據(jù)題意更新edge[i][j] #更新的時(shí)候,如果有無(wú)向圖需要edge[i][j]=edge[j][i]這樣設(shè)置,否則不用#三重循環(huán) 結(jié)束 for k in range(n):for i in range(n):for j in range(n):edge[i][j]=min(edge[i][j],edge[i][k]+edge[k][j])最短路之狄克斯特拉:
適用領(lǐng)域:既可以是無(wú)向圖也可以有向圖,權(quán)值必須非負(fù),求某個(gè)頂點(diǎn)到其他頂點(diǎn)的最短距離(單源)
缺點(diǎn):寫(xiě)起來(lái)會(huì)稍微麻煩一點(diǎn)比起Floyd 東西比較多
優(yōu)點(diǎn):跑的挺快的,數(shù)據(jù)量比較大的時(shí)候也能用Python解決
板子:
n=int(input())#根據(jù)題意 n代表結(jié)點(diǎn)個(gè)數(shù)edge={} #edge[i]={x:費(fèi)用1,y:費(fèi)用1....} 存結(jié)點(diǎn)之間的費(fèi)用cost=[] #cost[i]代表結(jié)點(diǎn)i到出發(fā)點(diǎn)的最短開(kāi)銷s=set() #集合s用于存儲(chǔ)處理過(guò)的結(jié)點(diǎn)def find_node():#find_node函數(shù)用于尋找未被處理過(guò)的最便宜的結(jié)點(diǎn)node,spend=None,float('inf')for i in range(n):if cost[i]<=spend and i not in s:#node,spend=i,cost[i]return nodewhile node:#只要還有結(jié)點(diǎn)未被處理for i in edge[node]:#遍歷node的鄰居cost[i]=min(cost[i],cost[node]+edge[node][i])s.add(node)node=find_nodeprint(#根據(jù)你的需要輸出出發(fā)點(diǎn)到某個(gè)結(jié)點(diǎn)i的費(fèi)用cost[i])#此外補(bǔ)充一個(gè),如果題還要我們求最短路徑上邊的個(gè)數(shù) #只需外加一個(gè)字典pre 每當(dāng)更新cost[i]時(shí),創(chuàng)建一個(gè)鍵值對(duì) #最后通過(guò)終點(diǎn)逆向遍歷統(tǒng)計(jì)次數(shù)即邊數(shù) 輸出即可取模運(yùn)算法則:
知識(shí)點(diǎn):若x>y>0,若p=x%y,那么p一定小于y,即p∈[0,y-1]?
兩屆連續(xù)考察了這個(gè)知識(shí)點(diǎn)!!重視
二分答案、Bisect模塊:
題目中出現(xiàn)最大的某某的最小值,最小的某某的最大值,沒(méi)有思路時(shí),往往可以直接去二分答案
板子:check函數(shù)是核心
#l,r根據(jù)題意設(shè)置 紅藍(lán)區(qū)域自己定義劃分def check(x):#假設(shè)x為答案#題目一般有有個(gè)約束條件#如果通過(guò)某種手段使得在x的條件下存在符合約束條件的解#那么就是可行解while l+1!=r:mid=(l+r)//2if check(mid):r=midelse:l=mid#取l還是r依據(jù)需要Bisect模塊:(只能用在升序數(shù)組,它源碼寫(xiě)的時(shí)候就默認(rèn)這個(gè)了QWQ)
import bisecta=[0,1,2,3,3,3,5]#一段升序數(shù)組bisect.bisect(a,b)#返回?cái)?shù)組a中最后一個(gè)<=b的數(shù)字的下標(biāo)+1#bisect.bisect(a,3)返回6bisect.bisect_left(a,3)#返回?cái)?shù)組中第一個(gè)等于3的下標(biāo)#bisect.bisect_left(a,3)返回3#如果不存在等于3的,和bisect.bisect等效bisect.bisect_right(a,3)#返回?cái)?shù)組中最后一個(gè)等于3的下標(biāo)+1#bisect.bisect_right(a,3)返回6#如果不存在等于3的,和bisect.bisect等效這個(gè)模塊通常用于查詢某個(gè)序列內(nèi) 屬于某個(gè)區(qū)間的數(shù)的個(gè)數(shù),>=p還是<=p?效率很高
當(dāng)然也可以直接用列表解析式+len函數(shù),但效率不高
len([i for i in a if i<=p]) #p自己設(shè)定[貢獻(xiàn)值法]:研究單個(gè)元素被引入后對(duì)結(jié)果的增量,實(shí)際上是把復(fù)雜的大問(wèn)題轉(zhuǎn)化為一個(gè)個(gè)小問(wèn)題,當(dāng)問(wèn)題難以入手時(shí),可以考慮這個(gè)做法
并查集:
板子
n=int(input()) #根據(jù)題意輸入節(jié)點(diǎn)個(gè)數(shù) #初始化 parent=[i for i in range(n)]#查找 def find_root(x):if parent[x]!=x:parent[x]=find_root(parent[x])return parent[x] #合并 def uion(x,y):x_root,y_root=find_root(x),find_root(y)parent[x_root]=y_root用途很廣,考的頻率也高哦,考試的時(shí)候多往這里想一想
最小生成樹(shù):
適用場(chǎng)景:對(duì)于有n個(gè)頂點(diǎn)的連通圖,其中只有n-1條邊的連通子圖即最小生成樹(shù)
常常這n-1條邊被賦予了權(quán)值 我們需要求出最小權(quán)值和
板子:里面有并查集的內(nèi)容!
n=int(input())edge=[]#edge[i]=[a,b,c]代表i這條邊連接了a,b,權(quán)值為cans=0#權(quán)值和edge.sort(key=lambda x:x[2])#按邊權(quán)升序排序for x in edge:#遍歷所有邊a,b,c=x[0],x[1],x[2]if find_root(a)!=find_root(b) and j<=n-1:#兩頂點(diǎn)不連通且當(dāng)前邊數(shù)小于n-1ans+=x[2]#權(quán)值累加union(a,b)j+=1print(ans)拓?fù)渑判?#xff1a;?
適用場(chǎng)景:有向圖,檢測(cè)環(huán),有向無(wú)環(huán)圖一定有拓?fù)湫蛄小?/span>
板子:
graph={'a':'bc','b':'ef'} #graph的key表示入邊,value表示被指向的點(diǎn)indegrees=dict((i,0) for i in graph) #初始化入度為0for i in graph:for j in graph[i]:#遍歷i的鄰居 鄰居入度+1indegrees[j]+=1stack=[]#存入度為0的點(diǎn) seq=[]#存拓?fù)湫蛄衒or i in indegrees:if indegrees[i]==0:#入度為0stack.append(i)#入棧while stack:#棧不為空t=stack.pop(0)seq.append(t)for i in graph[t]:#鄰居入度-1indegrees[i]-=1if indegrees[i]==0:stack.append(i)if len(seq)==len(graph):#無(wú)環(huán) else:#有環(huán)有關(guān)DP的,這里直接引用小藍(lán)的筆記啦,也就是這次的榜一~寫(xiě)的很棒!
【動(dòng)態(tài)規(guī)劃】?jī)?nèi)容很詳實(shí),左側(cè)傳送門(mén)?小藍(lán)刷題的博客_
?感謝藍(lán)橋杯一路陪伴 感謝對(duì)小鄭的支持
希望明天和我一起沖擊Python組的伙伴一舉拿下省一 一起見(jiàn)證國(guó)賽!
愿所有的努力都有回報(bào)!
總結(jié)
以上是生活随笔為你收集整理的【蓝桥杯考前一天总结PYthon终结篇】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Github上开源仿京东商城项目启动配置
- 下一篇: Squid代理服务器(缓存加速之Web缓