搜尋
首頁後端開發Python教學使用Python可視化O(n)。

介紹

在電腦科學和程式設計領域中,了解演算法的效率是至關重要的,因為它有助於創建既優化又快速執行的軟體。時間複雜度在這個背景下是一個重要的概念,因為它衡量了演算法的運行時間隨著輸入規模增長的變化。常用的時間複雜度類別O(n)表示輸入規模和執行時間之間的線性關係。

定義

計算機科學中的演算法複雜性是根據演算法的輸入大小來評估所需的資源,如時間和空間利用率。更進一步地說,它支持我們理解演算法在考慮其輸入大小時執行的速度。用來描述演算法複雜性的主要符號是大O符號(O(n))。

文法

for i in range(n):
   # do something

一個`for`循環,根據從0到`n-1`的範圍執行特定的一組指令,並在每次迭代中執行一個操作或一組操作。其中'n'表示迭代次數。

在O(n)時間複雜度下,隨著輸入規模'n'的增加,執行時間成比例增長。隨著'n'的增加,循環的迭代次數和完成循環所需的時間將成比例增加。線性時間複雜度表現出輸入規模和執行時間之間的直接比例關係。

可以在循環中執行任何任務或任務序列,而不考慮輸入大小'n'。這裡需要注意的主要方面是循環執行'n'次迭代,導致線性時間複雜度。

演算法

  • 步驟1:將一個變數sum初始化為0

  • #步驟2:遍歷提供的清單中的每個元素

  • #步驟3:將該元素合併到目前的總和值。

  • 第四步:循環結束後應傳回總和。

  • 步驟 5:結束

#方法

  • 方法1:繪製時間與輸入大小的關係

  • 方法二:繪製運算與輸入規模之間的關係

#方法1:繪製時間與輸入大小的關係圖

Example

import time
import matplotlib.pyplot as plt

def algo_time(n):
    sum = 0
    for i in range(n):
        sum += i
    return sum

input_sizes = []
execution_times = []

for i in range(1000, 11000, 1000):
    start_time = time.time()
    algo_time(i)
    end_time = time.time()
    input_sizes.append(i)
    execution_times.append(end_time - start_time)

plt.plot(input_sizes, execution_times)
plt.xlabel('Input Size')
plt.ylabel('Execution Time (s)')
plt.show()

輸出

使用Python可视化O(n)。

這段程式碼是用來測量`algo_time()`演算法在不同輸入大小下的運行時間。我們將把希望測試的輸入大小以及它們對應的執行時間儲存在這些清單中。

使用'for'迴圈來迭代一系列的輸入大小。在這種情況下,循環將從1000運行到接近11000之前,每次增加1000。進一步說明,我們計劃透過改變從1000到10000的'n'值來評估演算法,增量為1000。

在迴圈內部,我們針對每個輸入大小測量`algo_time()`函數的執行時間。為了開始追蹤時間,我們在呼叫函數之前使用`time.time()`,並在函數完成運行後立即停止。然後,我們將持續時間儲存在名為'execution_time'的變數中。

我們將每個給定輸入大小的輸入值('n')及其對應的執行時間加入它們各自的清單('input_sizes'和'execution_times')。

循環完成後,我們擁有產生繪圖所需的資料。 'plt.plot(input_sizes, execution_times)' 使用我們收集到的資料產生一個基本的折線圖。 x軸顯示的是代表不同輸入大小的 'input_sizes' 值。

'plt.xlabel()'和'plt.ylabel()'最後用於分別標記座標軸的含義,而呼叫'plt.show()'函數使我們能夠呈現圖形。

透過運行這段程式碼,我們可以透過繪製圖表來視覺化執行時間隨著輸入大小('n')的增加而增加。假設演算法的時間複雜度為O(n),我們可以近似認為當繪製圖表時,輸入大小和執行時間之間幾乎有直線的相關性。

方法二:繪製運算與輸入大小的關係

Example

import matplotlib.pyplot as plt

def algo_ops(n):
    ops = 0
    sum = 0
    for i in range(n):
        sum += i
        ops += 1
    ops += 1  # for the return statement
    return ops

input_sizes = []
operations = []

for i in range(1000, 11000, 1000):
    input_sizes.append(i)
    operations.append(algo_ops(i))

plt.plot(input_sizes, operations)
plt.xlabel

plt.xlabel('Input Size')
plt.ylabel('Number of Operations')
plt.show()

輸出

使用Python可视化O(n)。

這段程式碼旨在分析`algo_ops()`演算法在不同輸入大小下執行的操作次數。透過利用`algo_ops()`函數,可以計算從零到給定輸入參數'n'範圍內所有數值的求和結果,並同時追蹤和記錄每次計算過程中執行的每個操作。

我們首先導入'matplotlib.pyplot'模組,該模組允許我們創建諸如圖形之類的可視化。

接下來,我們定義 algo_ops() 函數,該函數接受一個輸入數字 'n'。在函數內部,我們初始化兩個變數:'ops' 用於計算操作次數,'sum' 用於儲存數字的累積和。

這些陣列將儲存我們希望檢查的維度及其對應的執行持續時間。

我們利用迭代循環的一種方式是在多個輸入尺度內進行循環。在這種情況下,循環執行範圍從1000到10000(除了11000)。這意味著我們將評估變數'n'在1000到10000之間以100為增量的技術。

在迴圈中,我們計算所有輸入大小的`algo_time()`過程的效能。我們在呼叫該程序之前使用`time.time()`開始一個秒錶,並在子程序執行結束後直接結束它。接下來,我們將時間間隔保存在一個名為'execution_period'的變數中。

對於每個輸入的大小,我們將輸入的值('n')包含在名為'input_sizes'的清單中。此外,我們也會將對應的處理時間附加在'execution_times'集合中。

循環完成後,我們已經累積了製作圖表所需的基本資料。語句 'plt.plot(input_sizes, execution_times)' 使用收集到的資料建立了一個基本的折線圖。 'input_sizes' 的值顯示在 x 方向軸上,表示不同的輸入大小。 'execution_times' 的值顯示在垂直軸上,表示執行 `algo_time()` 函數所需的時間,其輸入大小各不相同。

最後,我們透過 'plt.xlabel()' 和 'plt.ylabel()' 來標記座標系,以顯示每個軸的意義。接下來,執行 'plt.show()' 函數來呈現圖形。

一旦我們執行程序,圖表將向我們顯示當輸入的規模('n')增長時,處理時間如何上升。

結論

總之,掌握使用Matplotlib在Python中的時間複雜度和視覺化是任何尋求創建高效和優化軟體解決方案的程式設計師的寶貴技能。了解演算法在不同輸入規模下的行為,使我們能夠解決複雜問題並建立健壯的應用程序,以及及時有效地提供結果。

以上是使用Python可視化O(n)。的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:tutorialspoint。如有侵權,請聯絡admin@php.cn刪除
Python腳本可能無法在UNIX上執行的一些常見原因是什麼?Python腳本可能無法在UNIX上執行的一些常見原因是什麼?Apr 28, 2025 am 12:18 AM

Python腳本在Unix系統上無法運行的原因包括:1)權限不足,使用chmod xyour_script.py賦予執行權限;2)Shebang行錯誤或缺失,應使用#!/usr/bin/envpython;3)環境變量設置不當,可打印os.environ調試;4)使用錯誤的Python版本,可在Shebang行或命令行指定版本;5)依賴問題,使用虛擬環境隔離依賴;6)語法錯誤,使用python-mpy_compileyour_script.py檢測。

舉一個場景的示例,其中使用Python數組比使用列表更合適。舉一個場景的示例,其中使用Python數組比使用列表更合適。Apr 28, 2025 am 12:15 AM

使用Python數組比列表更適合處理大量數值數據。 1)數組更節省內存,2)數組對數值運算更快,3)數組強制類型一致性,4)數組與C語言數組兼容,但在靈活性和便捷性上不如列表。

在Python中使用列表與數組的性能含義是什麼?在Python中使用列表與數組的性能含義是什麼?Apr 28, 2025 am 12:10 AM

列表列表更好的forflexibility andmixDatatatypes,何時出色的Sumerical Computitation sand larged數據集。 1)不可使用的列表xbilese xibility xibility xibility xibility xibility xibility xibility xibility xibility xibility xibles and comply offrequent elementChanges.2)

Numpy如何處理大型數組的內存管理?Numpy如何處理大型數組的內存管理?Apr 28, 2025 am 12:07 AM

numpymanagesmemoryforlargearraysefefticefticefipedlyuseviews,副本和內存模擬文件.1)viewsAllowSinglicingWithOutCopying,直接modifytheoriginalArray.2)copiesCanbecopy canbecreatedwitheDedwithTheceDwithThecevithThece()methodervingdata.3)metservingdata.3)memore memore-mappingfileShessandAstaStaStstbassbassbassbassbassbassbassbassbassbassbb

哪個需要導入模塊:列表或數組?哪個需要導入模塊:列表或數組?Apr 28, 2025 am 12:06 AM

Listsinpythondonotrequireimportingamodule,helilearraysfomthearraymoduledoneedanimport.1)列表列表,列表,多功能和canholdMixedDatatatepes.2)arraysaremoremoremoremoremoremoremoremoremoremoremoremoremoremoremoremoremeremeremeremericdatabuteffeftlessdatabutlessdatabutlessfiblesible suriplyElsilesteletselementEltecteSemeTemeSemeSemeSemeTypysemeTypysemeTysemeTypysemeTypepe。

可以在Python數組中存儲哪些數據類型?可以在Python數組中存儲哪些數據類型?Apr 27, 2025 am 12:11 AM

pythonlistscanStoryDatatepe,ArrayModulearRaysStoreOneType,and numpyArraySareSareAraysareSareAraysareSareComputations.1)列出sareversArversAtileButlessMemory-Felide.2)arraymoduleareareMogeMogeNareSaremogeNormogeNoreSoustAta.3)

如果您嘗試將錯誤的數據類型的值存儲在Python數組中,該怎麼辦?如果您嘗試將錯誤的數據類型的值存儲在Python數組中,該怎麼辦?Apr 27, 2025 am 12:10 AM

WhenyouattempttostoreavalueofthewrongdatatypeinaPythonarray,you'llencounteraTypeError.Thisisduetothearraymodule'sstricttypeenforcement,whichrequiresallelementstobeofthesametypeasspecifiedbythetypecode.Forperformancereasons,arraysaremoreefficientthanl

Python標準庫的哪一部分是:列表或數組?Python標準庫的哪一部分是:列表或數組?Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境