上海網(wǎng)站開發(fā)怎么做百度廣告大全
算法:進(jìn)制轉(zhuǎn)換、模擬算法,枚舉算法,冒泡排序,插入排序,選擇排序,遞推算法,遞歸算法,貪心算法。
1.進(jìn)制轉(zhuǎn)換
二進(jìn)制:只包含0和1
八進(jìn)制:只包含0-7
十進(jìn)制:只包含0-9
十六進(jìn)制:只包含0-9和 ‘A’-‘F’
十進(jìn)制轉(zhuǎn)二進(jìn)制、八進(jìn)制、十六進(jìn)制
十進(jìn)制數(shù) a=5
二進(jìn)制 b=bin(a);八進(jìn)制 c=oct(a);十六進(jìn)制 d=hex(a)
二進(jìn)制轉(zhuǎn)十進(jìn)制、八進(jìn)制、十六進(jìn)制
二進(jìn)制數(shù) a=‘101010’
十進(jìn)制 b=int(a,2);八進(jìn)制 c=oct(b);十六進(jìn)制 d=hex(b)
八進(jìn)制轉(zhuǎn)十進(jìn)制、二進(jìn)制、十六進(jìn)制
八進(jìn)制數(shù) a='52'
十進(jìn)制 b=int(a,8);二進(jìn)制 c=bin(b);十六進(jìn)制 d=hex(b)
十六進(jìn)制轉(zhuǎn)十進(jìn)制、二進(jìn)制、八進(jìn)制
十六進(jìn)制數(shù) a='2a'
十進(jìn)制 b=int(a,16);二進(jìn)制 c=bin(b);十六進(jìn)制 d=oct(b)
總結(jié)
由上所知,當(dāng)二進(jìn)制,八進(jìn)制,十六進(jìn)制之間轉(zhuǎn)換時(shí),是以十進(jìn)制作為媒介。
十進(jìn)制數(shù)=int(某一進(jìn)制數(shù),其位數(shù))
二進(jìn)制=bin(十進(jìn)制數(shù))數(shù)學(xué)上采用‘整數(shù)部分除2,得余數(shù),商為0結(jié)束,將余數(shù)從下往上取;小數(shù)部分乘2,取整,直到達(dá)到精度要求結(jié)束,按照順序取’。
八進(jìn)制=hex(十進(jìn)制數(shù))數(shù)學(xué)上采用‘整數(shù)部分除8,得余數(shù),直到無法整除結(jié)束,將余數(shù)從下往上取;小數(shù)部分乘8,取整,直到達(dá)到精度要求結(jié)束,按照順序取’。
十六進(jìn)制=oct(十進(jìn)制數(shù))數(shù)學(xué)上采用‘整數(shù)部分除16,得余數(shù),直到無法整除結(jié)束,將余數(shù)從下往上取;小數(shù)部分乘16,取整,直到達(dá)到精度要求結(jié)束,按照順序取’。
其他數(shù)學(xué)上的轉(zhuǎn)換見:進(jìn)制之間的數(shù)學(xué)轉(zhuǎn)換
將二進(jìn)制數(shù) 1011 轉(zhuǎn)換為十進(jìn)制數(shù):
1011(二進(jìn)制) = 1×23 + 0×22 + 1×21 + 1×2? = 8 + 0 + 2 + 1 = 11(十進(jìn)制)
值得注意的是以上轉(zhuǎn)換會(huì)出現(xiàn)前綴,如果不需要前綴就要用到切片([2:])將前綴刪除。
同時(shí),除了十進(jìn)制數(shù)為數(shù)字類型,其他都屬于字符串類型,在定義時(shí)需要加引號(hào)。
2.模擬算法
- ?定義:通過模擬真實(shí)問題的操作步驟,逐步解決問題。
- 示例:模擬一個(gè)簡單的ATM取款機(jī)的操作流程。
- 輸入:取款金額,用戶賬戶余額
- 輸出:取款后賬戶余額
-
def atm_withdrawal(balance, amount):if amount > balance:return "Insufficient balance"else:balance -= amountreturn balancebalance = 1000 amount = 150 print(atm_withdrawal(balance, amount)) # 輸出: 850
3.枚舉算法:
- 定義:通過枚舉所有可能的情況來尋找問題的解。
- 示例:找出100以內(nèi)的所有素?cái)?shù)。
- 逐一檢查1到100中的每一個(gè)數(shù),判斷它是否為素?cái)?shù)。
-
def is_prime(n):if n <= 1:return Falsefor i in range(2, int(n**0.5) + 1):if n % i == 0:return Falsereturn Trueprimes = [x for x in range(2, 101) if is_prime(x)] print(primes) # 輸出: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
4.冒泡排序:
- 定義:一種簡單的排序算法,通過重復(fù)地遍歷待排序列,一次比較兩個(gè)元素,如果它們的順序錯(cuò)誤就交換它們的位置。
- 示例:對(duì)數(shù)組[5, 2, 9, 1, 5, 6]進(jìn)行排序。
- 經(jīng)過多次比較和交換,最終數(shù)組變?yōu)閇1, 2, 5, 5, 6, 9]。
-
def bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]return arrarr = [5, 2, 9, 1, 5, 6] print(bubble_sort(arr)) # 輸出: [1, 2, 5, 5, 6, 9]
5.插入排序:
- 定義:一種簡單的排序算法,構(gòu)建有序序列,對(duì)于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。
- 示例:對(duì)數(shù)組[5, 2, 9, 1, 5, 6]進(jìn)行排序。
- 逐步將元素插入到已排序部分,最終數(shù)組變?yōu)閇1, 2, 5, 5, 6, 9]。
-
def insertion_sort(arr):for i in range(1, len(arr)):key = arr[i]j = i - 1while j >= 0 and key < arr[j]:arr[j + 1] = arr[j]j -= 1arr[j + 1] = keyreturn arrarr = [5, 2, 9, 1, 5, 6] print(insertion_sort(arr)) # 輸出: [1, 2, 5, 5, 6, 9]
6.選擇排序:
- 定義:每一輪從未排序數(shù)據(jù)中選出最小值,將其與未排序部分的第一個(gè)元素交換,直到所有元素排序完畢。
- 示例:對(duì)數(shù)組[5, 2, 9, 1, 5, 6]進(jìn)行排序。
- 逐步選擇最小元素并交換,最終數(shù)組變?yōu)閇1, 2, 5, 5, 6, 9]。
-
def selection_sort(arr):for i in range(len(arr)):min_idx = ifor j in range(i+1, len(arr)):if arr[j] < arr[min_idx]:min_idx = jarr[i], arr[min_idx] = arr[min_idx], arr[i]return arrarr = [5, 2, 9, 1, 5, 6] print(selection_sort(arr)) # 輸出: [1, 2, 5, 5, 6, 9]
排序一般出現(xiàn)在選擇題,主要用到的就是內(nèi)置函數(shù)sort()和sorted(),是將數(shù)據(jù)從小到大排序?。
7.遞推算法:
- 定義:通過遞推關(guān)系逐步求解問題。
- 示例:斐波那契數(shù)列(Fibonacci sequence)的遞推。
- F(n) = F(n-1) + F(n-2),其中F(1) = 1, F(2) = 1。
-
def fibonacci(n):if n <= 0:return []elif n == 1:return [0]elif n == 2:return [0, 1]fib_sequence = [0, 1]for i in range(2, n):fib_sequence.append(fib_sequence[-1] + fib_sequence[-2])return fib_sequenceprint(fibonacci(10)) # 輸出: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
8.遞歸算法:
- 定義:函數(shù)直接或間接調(diào)用自身,以分解問題為子問題的方式解決問題。
- 示例:求解階乘n!。
- n! = n × (n-1)!,其中0! = 1。
-
def factorial(n):if n == 0:return 1else:return n * factorial(n - 1)print(factorial(5)) # 輸出: 120
9.貪心算法:
- 定義:每一步都做出在當(dāng)前看來最優(yōu)的選擇,從而希望得到全局最優(yōu)解。
- 示例:找零問題,給定面值為1、2、5元的硬幣,找出組成金額最少的硬幣數(shù)量。
- 對(duì)于金額11,最優(yōu)解為5+5+1,共使用3枚硬幣。
-
def min_coins(coins, amount):coins.sort(reverse=True)count = 0for coin in coins:while amount >= coin:amount -= coincount += 1return countcoins = [1, 2, 5] amount = 11 print(min_coins(coins, amount)) # 輸出: 3