日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【蓝桥杯考前一天总结PYthon终结篇】

發(fā)布時(shí)間:2024/3/13 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【蓝桥杯考前一天总结PYthon终结篇】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最短路之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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。