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

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

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

 一、遞歸原理小案例分析

(1)# 概述

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

(2)# 寫(xiě)遞歸的過(guò)程

1、寫(xiě)出臨界條件

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

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

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

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

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

深度遍歷示意圖:

說(shuō)明:

先把A壓棧進(jìn)去,在A出棧的同時(shí)把B C壓棧進(jìn)去,此時(shí)讓B出棧的同時(shí)把DE壓棧(C留著先不處理) 同理,在D出棧的時(shí)候,H I壓棧,最后再?gòu)纳贤?/p>

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

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

程序代碼:

#__author:"吉**"
#date: 2018/10/21 0021
#function:
# 深度優(yōu)先遍歷目錄層級(jí)結(jié)構(gòu)
import os
def getAllDirDP(path):
 stack = []
 # 壓棧操作,相當(dāng)于圖中的A壓入
 stack.append(path)
 # 處理?xiàng)?,?dāng)棧為空的時(shí)候結(jié)束循環(huán)
 while len(stack) != 0:
  #從棧里取數(shù)據(jù),相當(dāng)于取出A,取出A的同時(shí)把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](千)全棧學(xué)習(xí)python\18-10-21\day7\temp\dir')

結(jié)果:

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

原理分析:

說(shuō)明:

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

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

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

代碼實(shí)現(xiàn):

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

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

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

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

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

總結(jié)

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

相關(guān)文章

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

    Django框架自定義模型管理器與元選項(xiàng)用法分析

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

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

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

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

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

    python爬蟲(chóng)獲取淘寶天貓商品詳細(xì)參數(shù)

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

    Python Web程序部署到Ubuntu服務(wù)器上的方法

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

    Python實(shí)現(xiàn)CART決策樹(shù)算法及詳細(xì)注釋

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

    python之pymysql模塊簡(jiǎn)單應(yīng)用示例代碼

    這篇文章主要介紹了python之pymysql模塊簡(jiǎn)單應(yīng)用示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 使用Python模擬操作windows應(yīng)用窗口詳解

    使用Python模擬操作windows應(yīng)用窗口詳解

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

    Python中的異常處理相關(guān)語(yǔ)句基礎(chǔ)學(xué)習(xí)筆記

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

    淺析Python pandas模塊輸出每行中間省略號(hào)問(wèn)題

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

最新評(píng)論

连云港市| 黄冈市| 双流县| 临江市| 色达县| 始兴县| 公安县| 阳东县| 昭通市| 南靖县| 台东市| 读书| 新竹市| 龙胜| 西宁市| 惠州市| 桦甸市| 瓮安县| 和静县| 泸州市| 澄迈县| 东乌珠穆沁旗| 普宁市| 克什克腾旗| 鲜城| 乡宁县| 正定县| 商南县| 吉首市| 白河县| 临泽县| 二手房| 屏边| 五峰| 河西区| 炉霍县| 大港区| 龙海市| 阿克陶县| 永兴县| 富阳市|