最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 遞歸深度優(yōu)先搜索與廣度優(yōu)先搜索算法模擬實現(xiàn)

 更新時間:2018年10月22日 09:06:06   作者:北鼻coder  
這篇文章主要介紹了python 遞歸深度優(yōu)先搜索與廣度優(yōu)先搜索算法模擬實現(xiàn) ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下

 一、遞歸原理小案例分析

(1)# 概述

遞歸:即一個函數(shù)調(diào)用了自身,即實現(xiàn)了遞歸 凡是循環(huán)能做到的事,遞歸一般都能做到!

(2)# 寫遞歸的過程

1、寫出臨界條件

2、找出這一次和上一次關(guān)系

3、假設當前函數(shù)已經(jīng)能用,調(diào)用自身計算上一次的結(jié)果,再求出本次的結(jié)果

(3)案例分析:求1+2+3+...+n的數(shù)和

# 概述
'''
遞歸:即一個函數(shù)調(diào)用了自身,即實現(xiàn)了遞歸
凡是循環(huán)能做到的事,遞歸一般都能做到!
'''
# 寫遞歸的過程
'''
1、寫出臨界條件
2、找出這一次和上一次關(guān)系
3、假設當前函數(shù)已經(jīng)能用,調(diào)用自身計算上一次的結(jié)果,再求出本次的結(jié)果
'''
# 問題:輸入一個大于1 的數(shù),求1+2+3+....
def sum(n):
 if n==1:
  return 1
 else:
  return n+sum(n-1)
n=input("請輸入:")
print("輸出的和是:",sum(int(n)))
'''
輸出:
請輸入:4
輸出的和是: 10
'''

#__author:"吉*佳"
#date: 2018/10/21 0021
#function:
import os
def getAllDir(path):
 fileList = os.listdir(path)
 print(fileList)
 for fileName in fileList:
  fileAbsPath = os.path.join(path,fileName)
  if os.path.isdir(fileAbsPath):
   print("$$目錄$$:",fileName)
   getAllDir(fileAbsPath)
  else:
   print("**普通文件!**",fileName)
 # print(fileList)
 pass
getAllDir("G:\\")

輸出結(jié)果如下:

 二、深度遍歷與廣度遍歷

(一)、深度優(yōu)先搜索

說明:深度優(yōu)先搜索借助棧結(jié)構(gòu)來進行模擬

深度遍歷示意圖:

說明:

先把A壓棧進去,在A出棧的同時把B C壓棧進去,此時讓B出棧的同時把DE壓棧(C留著先不處理) 同理,在D出棧的時候,H I壓棧,最后再從上往下

取出棧內(nèi)還未出棧的元素,即達到深度優(yōu)先遍歷。

案例實踐:利用棧來深度搜索打印出目錄結(jié)構(gòu)

程序代碼:

#__author:"吉**"
#date: 2018/10/21 0021
#function:
# 深度優(yōu)先遍歷目錄層級結(jié)構(gòu)
import os
def getAllDirDP(path):
 stack = []
 # 壓棧操作,相當于圖中的A壓入
 stack.append(path)
 # 處理棧,當棧為空的時候結(jié)束循環(huán)
 while len(stack) != 0:
  #從棧里取數(shù)據(jù),相當于取出A,取出A的同時把BC壓入
  dirPath = stack.pop()
  firstList = os.listdir(dirPath)
  #判斷:是目錄壓棧,把該目錄地址壓棧,不是目錄即是普通文件,打印
  for filename in firstList:
   fileAbsPath=os.path.join(dirPath,filename)
   if os.path.isdir(fileAbsPath):
    #是目錄就壓棧
    print("目錄:",filename)
    stack.append(fileAbsPath)
   else:
    #是普通文件就打印即可,不壓棧
    print("普通文件:",filename)
getAllDirDP(r'E:\[AAA](千)全棧學習python\18-10-21\day7\temp\dir')

結(jié)果:

該過程示意圖解釋:(s-05-1部分)

原理分析:

說明:

       隊列是 先進先出的模型。A先進隊,在A出隊的時候,C B入隊,按圖示,C出隊,F(xiàn)G 入隊,B出隊,DE入隊,

F出隊,JK入隊,G出隊,無入隊,D出隊,H I入隊,最后E J K H I出隊,均無入隊了,即每一層一層處理、

故:先進先出的隊列結(jié)構(gòu)實現(xiàn)了廣度優(yōu)先遍歷。 先進后出的棧結(jié)構(gòu)實現(xiàn)的是深度優(yōu)先遍歷。

代碼實現(xiàn):

其實深度優(yōu)先和廣度優(yōu)先在代碼書寫上是差別不大的,基本相同,只是一個是使用棧結(jié)構(gòu)(用列表進行模擬)

另一個(廣度優(yōu)先遍歷)是使用了隊列的數(shù)據(jù)結(jié)構(gòu)來達到先進先出的目的。

#__author:"吉**"
#date: 2018/10/21 0021
#function:
# 廣度優(yōu)先搜索模擬
# 利用隊列來模擬廣度優(yōu)先搜索
import os
import collections
def getAllDirIT(path):
 queue=collections.deque()
 #進隊
 queue.append(path)
 #循環(huán),當隊列為空,停止循環(huán)
 while len(queue) != 0:
  #出隊數(shù)據(jù) 這里相當于找到A元素的絕對路徑
  dirPath = queue.popleft()
  # 找出跟目錄下的所有的子目錄信息,或者是跟目錄下的文件信息
  dirList = os.listdir(dirPath)
  #遍歷該文件夾下的其他信息
  for filename in dirList:
   #絕對路徑
   dirAbsPath = os.path.join(dirPath,filename)
   # 判斷:如果是目錄dir入隊操作,如果不是dir打印出即可
   if os.path.isdir(dirAbsPath):
    print("目錄:"+filename)
    queue.append(dirAbsPath)
   else:
    print("普通文件:"+filename)
# 函數(shù)的調(diào)用
getAllDirIT(r'E:\[AAA](千)全棧學習python\18-10-21\day7\temp\dir')

廣度優(yōu)先運行輸出結(jié)構(gòu):

先圖解:按照每一層從左到右遍歷即可實現(xiàn)。

總結(jié)

以上所述是小編給大家介紹的python 遞歸深度優(yōu)先搜索與廣度優(yōu)先搜索算法模擬實現(xiàn) ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Django框架自定義模型管理器與元選項用法分析

    Django框架自定義模型管理器與元選項用法分析

    這篇文章主要介紹了Django框架自定義模型管理器與元選項用法,結(jié)合實例形式分析了自定義模型管理器與元選項的功能、用法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-07-07
  • Python日期的加減等操作的示例

    Python日期的加減等操作的示例

    本篇文章主要介紹了Python日期的加減等操作的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • python UDP(udp)協(xié)議發(fā)送和接收的實例

    python UDP(udp)協(xié)議發(fā)送和接收的實例

    今天小編就為大家分享一篇python UDP(udp)協(xié)議發(fā)送和接收的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python爬蟲獲取淘寶天貓商品詳細參數(shù)

    python爬蟲獲取淘寶天貓商品詳細參數(shù)

    這篇文章主要為大家詳細介紹了python爬蟲獲取淘寶天貓商品詳細參數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Python Web程序部署到Ubuntu服務器上的方法

    Python Web程序部署到Ubuntu服務器上的方法

    在本文記錄了我在Ubuntu中部署Flask Web站點的過程, 其中包括用戶創(chuàng)建、代碼獲取、Python3環(huán)境的安裝、虛擬環(huán)境設置、uWSGI啟動程序設置,并將Nginx作為前端反向代理,需要的朋友參考下吧
    2018-02-02
  • Python實現(xiàn)CART決策樹算法及詳細注釋

    Python實現(xiàn)CART決策樹算法及詳細注釋

    CART算法是一種樹構(gòu)建算法,既可以用于分類任務,又可以用于回歸,本文僅討論基本的CART分類決策樹構(gòu)建,不討論回歸樹和剪枝等問題,感興趣的朋友跟隨小編一起看看吧
    2021-10-10
  • python之pymysql模塊簡單應用示例代碼

    python之pymysql模塊簡單應用示例代碼

    這篇文章主要介紹了python之pymysql模塊簡單應用示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • 使用Python模擬操作windows應用窗口詳解

    使用Python模擬操作windows應用窗口詳解

    在日常工作中,我們經(jīng)常遇到需要進行大量重復性任務的情況,這篇文章將介紹如何使用 Python 模擬操作記事本,感興趣的小伙伴可以了解下
    2025-02-02
  • Python中的異常處理相關(guān)語句基礎學習筆記

    Python中的異常處理相關(guān)語句基礎學習筆記

    這里我們簡單整理一下Python中的異常處理相關(guān)語句基礎學習筆記,包括try...except與assert等基本語句的用法講解:
    2016-07-07
  • 淺析Python pandas模塊輸出每行中間省略號問題

    淺析Python pandas模塊輸出每行中間省略號問題

    這篇文章主要介紹Python pandas模塊輸出每行中間省略號問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07

最新評論

定远县| 渭南市| 云霄县| 会昌县| 柘荣县| 九台市| 五台县| 平邑县| 澳门| 南涧| 苏尼特右旗| 日喀则市| 玉溪市| 措勤县| 南阳市| 长白| 高青县| 临沧市| 泽普县| 台北市| 安泽县| 嘉善县| 大冶市| 富阳市| 太康县| 新郑市| 诸城市| 平定县| 华亭县| 密云县| 襄垣县| 南阳市| 中西区| 出国| 郸城县| 剑川县| 芜湖县| 香港| 上高县| 清流县| 繁峙县|