欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python3實(shí)現(xiàn)旋轉(zhuǎn)數(shù)組的3種算法小結(jié)

 更新時(shí)間:2023年12月25日 11:41:09   作者:傻啦嘿喲  
旋轉(zhuǎn)數(shù)組是一種常見的數(shù)據(jù)結(jié)構(gòu)問題,通常是指一個(gè)有序數(shù)組經(jīng)過旋轉(zhuǎn)后,使得所有元素逆序排列,本文主要介紹了Python3實(shí)現(xiàn)旋轉(zhuǎn)數(shù)組的3種算法小結(jié),感興趣的可以了解一下

一、引言

旋轉(zhuǎn)數(shù)組是一種常見的數(shù)據(jù)結(jié)構(gòu)問題,通常是指一個(gè)有序數(shù)組經(jīng)過旋轉(zhuǎn)后,使得所有元素逆序排列。例如,給定一個(gè)數(shù)組 [4,5,6,7,0,1,2],它可能經(jīng)過旋轉(zhuǎn)變?yōu)?[0,1,2,4,5,6,7]。解決旋轉(zhuǎn)數(shù)組的問題對(duì)于理解算法設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)有重要意義。

二、線性時(shí)間復(fù)雜度算法

線性時(shí)間復(fù)雜度算法的基本思想是利用二分查找的思想,通過不斷縮小搜索范圍來找到目標(biāo)元素。具體步驟如下:

確定數(shù)組的左右邊界;
通過二分查找,確定目標(biāo)元素所在的子數(shù)組;
如果目標(biāo)元素在左半部分,直接返回索引;
如果目標(biāo)元素在右半部分,則計(jì)算相對(duì)位置并返回。
下面是Python3代碼實(shí)現(xiàn):

def search_rotate_array(nums, target):  
    left, right = 0, len(nums) - 1  
    while left <= right:  
        mid = (left + right) // 2  
        if nums[mid] == target:  
            return mid  
        if nums[left] <= nums[mid]:  
            if target >= nums[left] and target < nums[mid]:  
                right = mid - 1  
            else:  
                left = mid + 1  
        else:  
            if target > nums[mid] and target <= nums[right]:  
                left = mid + 1  
            else:  
                right = mid - 1  
    return -1

三、二分查找算法

二分查找算法是一種常見的搜索算法,適用于有序數(shù)組。對(duì)于旋轉(zhuǎn)數(shù)組,我們也可以利用二分查找的思想,但需要對(duì)搜索過程進(jìn)行一些調(diào)整。具體步驟如下:

確定數(shù)組的左右邊界;
通過二分查找,確定目標(biāo)元素所在的子數(shù)組;
根據(jù)子數(shù)組的大小和左右邊界的位置關(guān)系,確定目標(biāo)元素的位置并返回。
下面是Python3代碼實(shí)現(xiàn):

def search_rotate_array_binary(nums, target):  
    left, right = 0, len(nums) - 1  
    while left <= right:  
        mid = (left + right) // 2  
        if nums[mid] == target:  
            return mid  
        if nums[left] <= nums[mid]:  
            if target >= nums[left] and target < nums[mid]:  
                right = mid - 1  
            else:  
                left = mid + 1  
        else:  
            if target > nums[mid] and target <= nums[right]:  
                left = mid + 1  
            else:  
                right = mid - 1  
    return -1

四、分治算法

分治算法是一種將問題分解為若干個(gè)子問題,然后遞歸求解子問題的算法。對(duì)于旋轉(zhuǎn)數(shù)組,我們可以將其分為三種情況進(jìn)行討論:

旋轉(zhuǎn)點(diǎn)在左半部分;
旋轉(zhuǎn)點(diǎn)在右半部分;
旋轉(zhuǎn)點(diǎn)在中間。
在每種情況下,我們分別處理左半部分、中間部分和右半部分的子數(shù)組,然后將結(jié)果進(jìn)行合并,找到目標(biāo)元素的位置并返回。

下面是Python3代碼實(shí)現(xiàn):

def search_rotate_array_divide(nums, target):  
    def find_pivot(nums):  
        if nums[0] <= nums[-1]:  
            return 0  
        for i in range(len(nums) // 2):  
            if nums[i] > nums[i + len(nums) // 2]:  
                return i + 1  
        return -1  
      
    pivot = find_pivot(nums)  
    if pivot == -1:  
        return binary_search(nums, 0, len(nums) - 1, target)  
    if pivot == 0:  
        if nums[0] <= target:  
            return binary_search(nums, 0, pivot - 1, target)  
        else:  
            return binary_search(nums, pivot, len(nums) - 1, target)  
    if nums[pivot - 1] <= target and nums[pivot] >= target:  
        return pivot - 1  
    if nums[pivot] <= target and nums[pivot + 1] >= target:  
        return pivot  
    if nums[0] <= target:  
        return binary_search(nums, 0, pivot - 1, target)  
    else:  
        return binary_search(nums, pivot, len(nums) - 1, target)

五、性能分析

線性時(shí)間復(fù)雜度算法:該算法的時(shí)間復(fù)雜度為O(log n),其中n為數(shù)組的長(zhǎng)度。在處理大型旋轉(zhuǎn)數(shù)組時(shí),該算法的性能表現(xiàn)良好。
二分查找算法:該算法的時(shí)間復(fù)雜度也為O(log n)。與線性時(shí)間復(fù)雜度算法相比,二分查找算法的實(shí)現(xiàn)更為簡(jiǎn)單,但需要預(yù)先確定旋轉(zhuǎn)點(diǎn)的位置。
分治算法:該算法的時(shí)間復(fù)雜度為O(log n),但實(shí)現(xiàn)較為復(fù)雜。在處理大型旋轉(zhuǎn)數(shù)組時(shí),分治算法的性能表現(xiàn)良好,但需要注意處理各種特殊情況。

六、結(jié)論

旋轉(zhuǎn)數(shù)組問題是一種常見的數(shù)據(jù)結(jié)構(gòu)問題,對(duì)于理解算法設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)有重要意義。本文介紹了三種實(shí)現(xiàn)旋轉(zhuǎn)數(shù)組的算法:線性時(shí)間復(fù)雜度算法、二分查找算法和分治算法。

在實(shí)際應(yīng)用中,可以根據(jù)具體情況選擇合適的算法。線性時(shí)間復(fù)雜度算法和二分查找算法實(shí)現(xiàn)簡(jiǎn)單,適用于小型和中型旋轉(zhuǎn)數(shù)組;而分治算法實(shí)現(xiàn)較為復(fù)雜,但適用于大型旋轉(zhuǎn)數(shù)組。通過合理選擇和優(yōu)化算法,可以提高程序的性能和穩(wěn)定性。

到此這篇關(guān)于Python3實(shí)現(xiàn)旋轉(zhuǎn)數(shù)組的3種算法小結(jié)的文章就介紹到這了,更多相關(guān)Python3 旋轉(zhuǎn)數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解python:time模塊用法

    詳解python:time模塊用法

    這篇文章主要介紹了python:time模塊用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python Web程序部署到Ubuntu服務(wù)器上的方法

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

    在本文記錄了我在Ubuntu中部署Flask Web站點(diǎn)的過程, 其中包括用戶創(chuàng)建、代碼獲取、Python3環(huán)境的安裝、虛擬環(huán)境設(shè)置、uWSGI啟動(dòng)程序設(shè)置,并將Nginx作為前端反向代理,需要的朋友參考下吧
    2018-02-02
  • Python光學(xué)仿真實(shí)現(xiàn)波長(zhǎng)與顏色之間對(duì)應(yīng)關(guān)系示例解析

    Python光學(xué)仿真實(shí)現(xiàn)波長(zhǎng)與顏色之間對(duì)應(yīng)關(guān)系示例解析

    這篇文章主要為大家介紹了Python光學(xué)仿真實(shí)現(xiàn)波長(zhǎng)與顏色之間對(duì)應(yīng)關(guān)系的示例解析,有需要的我朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • 在Tensorflow中實(shí)現(xiàn)梯度下降法更新參數(shù)值

    在Tensorflow中實(shí)現(xiàn)梯度下降法更新參數(shù)值

    今天小編就為大家分享一篇在Tensorflow中實(shí)現(xiàn)梯度下降法更新參數(shù)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python中的閉包用法實(shí)例詳解

    python中的閉包用法實(shí)例詳解

    這篇文章主要介紹了python中的閉包用法,以實(shí)例形式詳細(xì)分析了Python中閉包的概念及相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-05-05
  • python中的循環(huán)結(jié)構(gòu)問題

    python中的循環(huán)結(jié)構(gòu)問題

    這篇文章主要介紹了python中的循環(huán)結(jié)構(gòu)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • python GUI庫(kù)圖形界面開發(fā)之PyQt5多線程中信號(hào)與槽的詳細(xì)使用方法與實(shí)例

    python GUI庫(kù)圖形界面開發(fā)之PyQt5多線程中信號(hào)與槽的詳細(xì)使用方法與實(shí)例

    這篇文章主要介紹了python GUI庫(kù)圖形界面開發(fā)之PyQt5多線程中信號(hào)與槽的詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下
    2020-03-03
  • Python實(shí)現(xiàn)銀行賬戶資金交易管理系統(tǒng)

    Python實(shí)現(xiàn)銀行賬戶資金交易管理系統(tǒng)

    這篇文章主要介紹了Python銀行賬戶資金交易管理系統(tǒng),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 基于PyTorch實(shí)現(xiàn)一個(gè)簡(jiǎn)單的CNN圖像分類器

    基于PyTorch實(shí)現(xiàn)一個(gè)簡(jiǎn)單的CNN圖像分類器

    本文記錄了一個(gè)簡(jiǎn)單的基于pytorch的圖像多分類器模型構(gòu)造過程,參考自Pytorch官方文檔、磐創(chuàng)團(tuán)隊(duì)的《PyTorch官方教程中文版》以及余霆嵩的《PyTorch 模型訓(xùn)練實(shí)用教程》。從加載數(shù)據(jù)集開始,包括了模型設(shè)計(jì)、訓(xùn)練、測(cè)試等過程。
    2021-05-05
  • Pytorch寫數(shù)字識(shí)別LeNet模型

    Pytorch寫數(shù)字識(shí)別LeNet模型

    這篇文章主要介紹了Pytorch寫數(shù)字識(shí)別LeNet模型,LeNet-5是一個(gè)較簡(jiǎn)單的卷積神經(jīng)網(wǎng)絡(luò),??LeNet-5?這個(gè)網(wǎng)絡(luò)雖然很小,但是它包含了深度學(xué)習(xí)的基本模塊:卷積層,池化層,全連接層。是其他深度學(xué)習(xí)模型的基礎(chǔ),?這里我們對(duì)LeNet-5進(jìn)行深入分析,需要的朋友可以參考下
    2022-01-01

最新評(píng)論