noip 初賽複習重點知識點
一.進位制轉化
將k進位制數轉化為十進位制數:
設k進位制數為(abcd)k,則對應十進位制數為
(小數同理,乘k的負冪次)
將十進位制數轉成k進位制數:
設十進位制數為x:
t1=x/k,t2=x mod k
t11=t1/k,t22=t1 mod k
......
t1n=t1 n-1 /k,t2 n= t1 n-1 mod k,此時t1n=0
於是k進位制數為t2n t2n-1...t22 t21排列
(小數則乘k取整,從前向後排列)
附錄:進位制的字母表達:
H(Hexadecimal)——16進位制
D(Decimal)——10進位制
O(Octonary)——8進位制
B(Binary)——2進位制
二.邏輯運算
邏輯與:∧(或‘·’)
邏輯或:∨ (或‘+’)
邏輯非:┐
優先順序:邏輯非>邏輯與>邏輯或,有括號按括號,無括號先按優先順序,同級運算從左至右
與位運算結合優先順序:邏輯非(!,┐)=按位反(~)>位移運算(<<,>>)>不等號(>=,<=)>等號(==,!=)>按位與(&)>按位異或(^)>按位或(|)>邏輯與(&&,∧)>邏輯或(||,∨)
三.資料結構
1.二叉樹
(1)二叉樹的三種遍歷方式:
①.先序遍歷:根-左-右
例:
如圖所示,這棵二叉樹的先序遍歷為1245367
②.中序遍歷:左-根-右:
例:
如圖所示,這棵二叉樹的中序遍歷為4251637
③.後序遍歷:左-右-根
如圖所示,這棵二叉樹的後序遍歷為4526731
結論:給定中序遍歷和先序遍歷或後序遍歷組合都可以確定這棵二叉樹,但是給定先序遍歷和後序遍歷組合則不可確定
(2)二叉樹特例:
完全二叉樹:對於每個節點,都有兩個子節點
滿二叉樹:對於每個節點,都有兩個子節點且樹完全“平衡”,總節點個數為2^k-1,k∈Z(如上面的樣例)
(3)二叉樹的有關公式:
一棵滿二叉樹:節點個數為,葉節點個數為<其中k為樹的高度
二叉樹的深度均攤為log2n,其中n為節點個數(這就是treap等二叉搜尋樹時間複雜度的來源)
2.棧與佇列
(1)棧:只有一個口,後進棧者先出棧
與棧類似的例項(題例):
只有一個口的火車站(為什麼要修成這樣...)
漢諾塔(以及各種積木壘塔遊戲)
(2)佇列:有head和tail,從尾入隊,從頭出隊,先進先出
3.連結串列:
連結串列:每個元素會有一個指標指向要求的下一個元素
分類:
單向連結串列:每個元素只有一個指標指向下一個元素
雙向連結串列:每個元素有兩個指標,一個指向下一個元素,另一個指向指向他的元素
連結串列可以實現O(n)查詢,O(1)刪除(重構指標即可)
4.圖論有關知識:
完全圖:任意兩點均有連邊的圖,其中邊數為n*(n-1)/2,其中n為圖中節點個數
連通圖:任意兩點之間都能直接或間接通過邊到達的圖
樹:任意兩點之間的簡單路徑有且僅有一條(或有n個點,n-1條邊的連通圖)
尤拉圖:可以一筆畫出來的圖
一個圖是尤拉圖的充要條件(無向圖):度為奇數點的點的個數<=2
相關定義:
尤拉環遊:通過圖中每邊恰好一次的閉路徑
尤拉閉跡:通過圖中每邊恰好一次的路徑
三.IT基礎知識與歷史:
1.程式語言:
程式語言主要分兩類:面向物件和麵向過程
常見的面向物件高階語言:
simula 67,支援單繼承和一定含義的多型和部分動態繫結;
Smalltalk,支援單繼承、多型和動態繫結;
C++,支援多繼承、多型和部分動態繫結。
Java,支援單繼承、多型和部分動態繫結。
結論:面嚮物件語言常見特點:封裝,繼承,多型
常見的面向過程高階語言:
C語言
Fortran語言
常見的低階語言:
彙編
高階語言與低階語言的區別:
高階語言更易移植,需要編譯執行,低階語言(彙編)常數極小,執行速度快
2.計算機歷史
對計算機做出重要貢獻的人物:
圖靈,馮·諾依曼(101頁報告,EDVAC)
計算機的頂級獎項:
圖靈獎
中國獲圖靈獎的人物:
姚期智
第一臺計算機:
ENIAC
第一臺具有儲存程式功能的計算機:
EDVAC
3.計算機硬體原理問題:
微型計算機的面世——超大規模積體電路
計算機儲存:
常見儲存裝置:ROM,RAM,硬碟,U盤,記憶體
四.實際問題的解決:
1.常見遞推問題:
平面分割問題:
n條直線最多將平面分成的部分:=
推廣:n個平面最多將空間分成的部分:
n條封閉曲線最多將平面分成的部分:
n條折線最多將平面分成的部分:
n條‘Z’型折線最多將平面分成的部分:
斐波那契數列問題:
卡特蘭數列問題:
2.