基本概率啥的就不搬書上的了,主要寫寫我自己的體會。
資料結構:我覺得資料結構是一種人為精心選擇的儲存資料的方式,用以解決現實生活中資料間的複雜關係,我們學習的棧,佇列等只是資料結構的基礎,根據實際題目等可以選取便利的資料結構,甚至自己拼湊、修改出乙個最適合的資料結構。總而言之,我認為資料結構是儲存資料的一種模板。
演算法:演算法與資料結構經常放在一起講,起初我一直不大明白是為什麼,而現在我認為在我們選取了合適的資料結構之後,我們需要解決實際的問題,而解決實際的問題的方法便是演算法。
程式=資料結構+演算法
解決實際問題的方法有很多種,而衡量乙個演算法是否優秀的依據便是時間複雜度與空間複雜度。
時間複雜度的理解:一般來說,資料越大越多的話,執行時間越久。我們不可能每次都去測試一下程式執行的時間,那樣很蠢。所以時間複雜度是一種不執行程式的粗略的估計程式時間的方法。
而我們學過數學也知道,一般而言,但資料較大的時候,最高次項對結果的影響最大,所以我們為了方便,便只保留最高次項,並且因為計算器很多時候資料過於巨大,我們也可以忽略掉最高次項前的係數。
時間複雜度的計算其實很簡單,看程式中有多少個迴圈,如果有2個從0到n的迴圈時間複雜度便是n。而乙個巢狀相當於乙個n2,兩個巢狀相當於n3。
較為常見的演算法時間複雜度有n3,n2,n,n logn , log n,1,其中最優秀的肯定是1,不過較為少見,正常乙個較好的演算法他的時間複雜度為nlogn,我們在寫出n2的演算法時,應該考慮是否可以優化到nlogn。
例項1.1 最大子列和問題
#include
intmaxnum
(int a,
int n )
;int
main()
printf
("%d\n"
,maxnum
(a,k));
}}intmaxnum
(int a,
int n )
return maxsum;
}
習題1.8 二分查詢
二分其實就是乙個數學思想,查詢乙個東西,不斷二分查詢是最快的方法。
習題1.8 二分查詢
position binarysearch
( list l, elementtype x )
else
if(l-
>data[mid]
else
if(l-
>data[mid]
>x)
}return notfound;
}
習題1.9 有序陣列的插入
這個很簡單,插入就完事了。
習題1.9 有序陣列的插入
bool
insert
( list l, elementtype x )
for(
int i=
0;i<=l-
>last;i++
)else
if(l-
>data[i]
l->data[i]
=x; l-
>last++
;return
true;}
} l-
>data[l-
>last+1]
=x; l-
>last++
;return
true
;}
理解了資料結構與演算法基本概率之後,我們就開始正式學習資料結構了。 資料結構 三分 概率
有乙個人,做乙個烟花需要n分鐘,做的好的概率是p 0.0001,點燃一次烟花需要m分鐘 不管有多少個烟花 如果點燃的烟花中有乙個好的,就停止做烟花,否則就繼續練習,問最少需要多長的練習時間?輸入第一行乙個t,代表t組樣例 接下來的t行,每一行輸入n,m,p 輸出最小的練習時間輸入3 1 1 5000...
資料結構基本定義
一 何為資料結構 資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間的關係和操作等相關問題的學科。基本概念與術語 資料 資料元素 何為資料元素 是組成資料的 有一定意義的基本單位,在計算機中通常作為整體處理。也被稱為記錄。資料項何為資料項 乙個資料元素可以由若干個資料項組成。資料項...
資料結構基本術語
資料 data 對客觀事物的符號表示,在電腦科學當中指所以能輸入到計算機中並被計算機處理的符號總稱.資料元素 data element 是資料的基本單位,通常作為整體考慮.資料元素可以由若干個資料項組成.比如 書名,作者名,編號組成乙個資料元素 資料物件 data object 性質相同的資料元素的...