关于算法竞赛入门经典3.4.2思考题题目1必要的存储量的思考
存儲量的存在意義是什么
就是用來存儲某一種信息或者問題求解時的某一種狀態(tài),以方便程序在需要回溯信息的時候加以利用。
題目1:必要的存儲量
以下哪些可以不借助數(shù)組,那些必須借助數(shù)組?也就是一個關(guān)于求解數(shù)據(jù)和輸入數(shù)據(jù)之間的獨(dú)立性問題。
-1 統(tǒng)計個數(shù)、
-2求max,min,average、
-3 求哪兩個數(shù)最接近、
-4 求第二大的值、
-5 求方差、
-6 統(tǒng)計不超過平均數(shù)的個數(shù)
我將這類題分為兩類:
1.依賴于當(dāng)前狀態(tài)
2.依賴于(所有)輸入數(shù)據(jù)
1.依賴當(dāng)前狀態(tài)
對于第1.2.4問,只需要在輸入數(shù)據(jù)的時候讀取一次數(shù)據(jù)信息,信息的傳遞是連續(xù)性的,不需要回溯已輸入數(shù)據(jù)就可以實(shí)現(xiàn)相應(yīng)功能。
比如統(tǒng)計功能,輸入數(shù)據(jù)的同時進(jìn)行統(tǒng)計,當(dāng)輸入下一個數(shù)據(jù)時,已經(jīng)不需要再考慮前面的數(shù)據(jù)信息的影響了,因此不需要數(shù)組來額外存儲數(shù)據(jù)信息。
2.依賴于(所有)已輸入數(shù)據(jù)
以方差為例,方差的計算主要分為兩步,第一步,通過讀取輸入數(shù)據(jù)獲得平均值,第二步,通過方差公式求解方差,方差公式要用到已輸入數(shù)據(jù)X和均值μ,即第二步依賴于第一步獲取的平均值信息和輸入數(shù)據(jù)信息。平均值可以在完第一步之后即時獲得,然而在不利用數(shù)組存儲的情況下,輸入數(shù)據(jù)在輸入下一個數(shù)據(jù)時就已經(jīng)丟失了。
關(guān)于其他幾問
關(guān)于第3問,由于需要回溯之前輸入的數(shù)據(jù),以判斷兩個數(shù)的接近程度,因而需要數(shù)組的輔助,我之前看到一篇博客3.4.2 題目1 必要的存儲量說不需要數(shù)組,其中代碼只考慮到已經(jīng)輸入的前三個數(shù)據(jù)的狀態(tài),而忽視了一個問題,存在這樣一種情況,如果第四個數(shù)據(jù)和第三個數(shù)據(jù)最接近,但是由于第三個數(shù)據(jù)和前面兩個數(shù)據(jù)的接近值相比并不是最接近的而導(dǎo)致第三個數(shù)據(jù)的信息被舍棄了,這樣反而無法得到正確答案:實(shí)際上最接近的是第三個第四個數(shù)據(jù)。用 4 8 13 14這個輸入數(shù)據(jù)測試一下就知道了。
像是求第二大的值,這類問題,最大值和第二大值的關(guān)系如何理解是關(guān)鍵,像之前那些需要數(shù)組存儲的問題,一個關(guān)鍵點(diǎn)在于,它們的數(shù)據(jù)處理,我稱之為所求數(shù)據(jù)的獨(dú)立性,像是方差,它和輸入數(shù)據(jù)的關(guān)系并不獨(dú)立,多一個輸入數(shù)據(jù),方差又需要重新計算平均值,重新利用方差公式計算求解。而第二大值問題,很明顯,第二大值是相對比較獨(dú)立的,當(dāng)數(shù)據(jù)輸入后就不再依賴于之前已輸入的數(shù)據(jù)了,對于新輸入的數(shù)據(jù),要么讓它更大(等于新輸入數(shù)據(jù)或者新輸入數(shù)據(jù)比最大值大,也就是,空降一個二大王或者大王被降職當(dāng)二大王了…),要么不變(嘍啰不需要名字…),就這兩種狀態(tài)變化。最大值和二大值明顯依賴于當(dāng)前狀態(tài)就可以獲得,對于一個新輸入的值,不需要拿他和已經(jīng)輸入的數(shù)據(jù)進(jìn)行比較,只需要拿他和當(dāng)前的最大值以及二大值比較即可,無須存儲已輸入的數(shù)據(jù)信息。
總結(jié)
以上是生活随笔為你收集整理的关于算法竞赛入门经典3.4.2思考题题目1必要的存储量的思考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Notes Ninth Day-渗透攻击
- 下一篇: iOS 蓝牙开发 swift (一)