Python教程

當前位置:小碼王 > 學習教程 > Python教程

Python入門教程:常見的Python算法實現
導讀:現在很多人都說scratch編程和Python編程都是少兒編程課程的科目,現在很多人對于scratch多少還有一些了解,不過對于少兒學習Python多少還是有些疑問,不如今天先來和大家一起看下Python入門教程:常見的Python算法實現。

  現在很多人都說scratch編程和Python編程都是少兒編程課程的科目,現在很多人對于scratch多少還有一些了解,不過對于少兒學習Python多少還是有些疑問,不如今天先來和大家一起看下Python入門教程:常見的Python算法實現。


  1、選擇排序


  選擇排序是一種簡單直觀的排序算法。它的原理是這樣:首先在未排序序列中找到最?。ù螅┰?,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續尋找最?。ù螅┰?,然后放到已排序序列的后面,以此類推,直到所有元素均排序完畢。算法實現如下:


  #找到最小的元素def FindSmall(list):min=list[0]for i in range(len(list)):if list<i>


  2、快速排序


  快速排序的運行速度快于選擇排序,它的工作原理是這樣:設要排序的數組是N,首先任意選取一個數據(通常選用數組的第一個數)作為關鍵數據,然后將所有比它小的數都放到它前面,所有比它大的數都放到它后面,這個過程稱為一趟快速排序??梢允褂胮ython用遞歸式的方法來解決這個問題:


  def Quick_Sort(list):if len(list)&lt;2:&gt;temp=list[0]less=[i for i in list[1:]if i&lt;=temp]more=[i for i in list[1:]if i&gt;temp]return Quick_Sort(less)+[temp]+Quick_Sort(more)testArr=[13,44,53,24,876,2]print(Quick_Sort(testArr))


  3、二分查找


  二分查找的輸入是一個有序的列表,如果要查找的元素包含在一個有序列表中,二分查找可以返回其位置。打個比方來說明二分查找的原理:比如我隨便想了個范圍在1~100以內的整數,由你來猜,以最少的次數來猜出這個數字,你每次猜完給出個數字,我會回復大了或小了,第一種方法是你從1開始依次往后猜,那如果我想的數字是100,那么你就要猜100次;第二種方法是從50開始,如果我說小了,那你就猜75,就這樣依次排除掉一半的剩余數字,這就是二分查找法??梢钥闯龆植檎曳ǜ涌焖?。對于包含n個元素的有序列表,用簡單查找最多需要n步,而二分查找法則最多只需lon2 n步。下面用python來實現該算法:


  def Item_Search(list,item):low=0 high=len(list)-1 while low&lt;=high:middle=(low+high)//2 print(list[middle])if list[middle]&gt;item:high=middle-1 elif list[middle]


  4、廣度優先搜索


  廣度優先搜索是一種圖算法,圖由節點和邊組成,一個節點可能與多個節點連接,這些節點稱為鄰居。廣度優先搜索算法可以解決兩類問題:第一類是從節點A出發,有沒有前往節點B的路徑;第二類問題是從節點A出發,前往B節點的哪條路徑最短。使用廣度優先搜索算法的前提是圖的邊沒有權值,即該算法只用于非加權圖中,如果圖的邊有權值的話就應使用狄克斯特拉算法來查找最短路徑。舉個例子,假如你認識alice、bob、claire,bob認識anuj、peggy,alice認識peggy,claire認識tom、jonny,你需要在最短的路徑內找到通過認識的人找到tom,那么算法實現如下:


  #使用字典構建圖graph={}graph["you"]=["Alice","Bob","Claire"]graph["Bob"]=["Anuj","Peggy"]graph["Alice"]=["Peggy"]graph["Claire"]=["Tom","Jonny"]graph["Anuj"]=[]graph["Peggy"]=[]graph["Tom"]=[]graph["Jonny"]=[]from collections import deque#簡單的判斷方法def person_is_seller(name):return name=='Tom'def Search(name):searched=[]#用于記錄檢查過的人,防止進入死循環search_queue=deque()#創建隊列search_queue+=graph[name]while search_queue:person=search_queue.popleft()if not person in searched:#僅當這個人沒檢查過時才檢查if person_is_seller(person):print("the seller is{0}".format(person))return True else:search_queue+=graph[person]searched.append(person)#將這個人標記為檢查過return Falseprint(Search("you"))


  5、貪婪算法


  貪婪算法,又名貪心算法,對于沒有快速算法的問題(NP完全問題),就只能選擇近似算法,貪婪算法尋找局部最優解,并企圖以這種方式獲得全局最優解,它易于實現、運行速度快,是一種不錯的近似算法。假如你是個小偷,商店里有很多箱子,箱子里有各種水果,有些箱子里有3種水果,有些箱子有2種...,你想嘗到所有種類的水果,但你一個人力氣有限,因此你必須盡量搬走最少的箱子,那么,算法實現如下:


  fruits=set(["蘋果","香蕉","梨子","西瓜","草莓","橘子","荔枝","榴蓮"])#箱子以及包含的水果box={}box["b1"]=set(["蘋果","香蕉","西瓜"])box["b2"]=set(["草莓","橘子","榴蓮"])box["b3"]=set(["梨子","荔枝","草莓"])box["b4"]=set(["香蕉","橘子"])box["b5"]=set(["梨子","榴蓮"])final_boxs=set()#最終選擇的箱子#直到fruits為空while fruits:best_box=None#包含了最多的未包含水果的箱子fruits_covered=set()#包含該箱子包含的所有未包含的水果#循環迭代每個箱子,并確定它是否為最佳箱子for boxItem,fruitItem in box.items():covered=fruits&fruitItem#計算交集if len(covered)&gt;len(fruits_covered):best_box=boxItem fruits_covered=covered fruits-=fruits_covered final_boxs.add(best_box)print(final_boxs)。


  分享一些Python技巧給剛學的小朋友們,希望家長朋友們帶著小朋友們一起練習,畢竟在小朋友們眼中,父母是強大的依靠,是無所不能的。也希望小朋友們能夠積極練習,編寫出一個炫酷的程序,讓同學們羨慕,一定是非常開心、有成就感滴。


浙江6十1查询结果