1.sum求和
>>> x=2
>>> sum(x*y for y in range(1,101))
10100
>>> 5050*2
10100
>>> sum(i for i in range(1,101))
5050
>>> sum(3+i for i in range(1,101))
5350
>>> sum(3+i for i in range(1,101))+sum(4*i for i in range(1,101))
25550
>>> sum(3+i+4*i for i in range(1,101))
25550
2.兩種賽制的故事:
對迴圈賽的理解,可以理解為開會的一群人中每個人都要和別人握手,或者完全圖中的邊的數量。
答案為n(n-1)/2,確實是:
其他思路:第一位騎士的對手數應該是n-1,第二位騎士的對手數就是n-2了。這樣一直推下去,一直到最後那位騎士(他只剩下0場比賽和0個騎士對手了)這樣,我們就可以得出它們的求和式:n-1+n-2+...+1+0=n(n-1)/2。若n=100,則需要
>>> sum(i for i in range(100))
4950
這麼多場比賽~~
2.龜兔賽跑:
淘汰賽:考慮,在首輪比賽中,由於所有騎士都要參與配對,所以應該會有n/2場比賽。而進入第二輪比賽的人數只有原來的一半,因而這一輪的比賽場次應該為n/4。如此以此類推下去,一直到最後一輪比賽,比賽的總場次應該合計為n/2+n/4+n/8+...+1
由於每一場比賽都會有一名騎士被淘汰,所以最終除冠軍以外的所有人都會被淘汰(並且他們都是一次性淘汰),所以我們需要n-1場比賽來決定只留下哪乙個人。
比賽結構如下圖所示,這是一棵帶跟的樹結構,其每一片葉子是乙個騎士,內部各節點(包括根節點)代表一場比賽。一共n個葉子和n-1個內部結點。
該比賽輪次的上限應為h-1(或者該二叉樹的高度是h,所以2的h次方=n)
猜數遊戲:
>>> from random import randrange
>>> n=10**90
>>> p=randrange(10**90)
>>> p>> p>> n/4>> from math import log
>>> log(n,2)
298.9735285398626
p是未知的,讓我們只能問問題,回答者只能回答yes/no。問多少個問題可以猜出p的大小。
我們可以持續成倍縮小其可選範圍,大致在300個問題之內就能找到答案。
(這是一種所謂超理想對數演算法的乙個典型示例)
這其實是二分法或二分搜尋法的乙個例項,也是最重要、最知名的一種對數演算法。
指數級演算法的例子:
小麥與棋盤的問題:在棋盤的第乙個方格放一顆小麥,第二個方格放兩顆,第三個方格放四顆,以此類推,最後會有多少小麥呢?
一共有64個方格。最後乙個方格中應該放2的63次方個。2的64次方–1 = 18,446,744,073,709,551,615。
從1到n的翻倍數與從n到1的減半數是相同的。
組合計數(初步)
組合數學主要是研究某組離散物件滿足一定條件的安排的存在性 構造及計數等問題。組合計數理論是組合數學中乙個最基本的研究方向,主要研究滿足一定條件的安排方式的數目及其計數問題。本課程主要介紹組合數學中常見的和重要的一些計數原理 計數方法和計數公式,包括一般的排列 組合的計算以及生成函式 容斥原理 反演原...
python演算法之計數比較
計數比較方式實現變位詞判斷 需求 比較兩個字串是否為變位詞 計數比較方式解題思路 對比兩個詞中每個字母出現的次數 如果26個字母出現的次數都相同 則兩個字串一定是變位詞 def count comparison s1,s2 c1 0 26 c2 0 26for i in range len s1 i...
python演算法總結(三) 計數排序
演算法的步驟如下 1 找出待排序的陣列中最大和最小的元素 2 統計陣列中每個值為i的元素出現的次數,存入陣列c的第i項 3 對所有的計數累加 從c中的第乙個元素開始,每一項和前一項相加 4 反向填充目標陣列 將每個元素i放在新陣列的第c i 項,每放乙個元素就將c i 減去1 對於資料2 5 3 0...