傅曉航,鄭歡歡
(南京理工大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,江蘇 南京 210094)
分治算法是一個(gè)將規(guī)模較大問(wèn)題分解為多個(gè)規(guī)模相同子問(wèn)題的算法[1]。許多算法都是基于分治策略實(shí)現(xiàn)的,例如搜索、快速排序、歸并排序、TOP-K算法等等;此外分治策略能夠應(yīng)用于許多算法的優(yōu)化,例如防火墻規(guī)則匹配算法、蟻群算法、并行碰撞檢測(cè)算法等等,相關(guān)研究如文獻(xiàn)[2-5]。分治策略的核心思想是將一個(gè)問(wèn)題等分為多個(gè)形式相同的子問(wèn)題,圖1所示為每次將問(wèn)題劃分為兩個(gè)相等子問(wèn)題時(shí)的分治算法。為提高算法的性能,該文將研究將原問(wèn)題分解為多少個(gè)子問(wèn)題時(shí)分治算法的效率最高。
圖1 每次劃分兩子問(wèn)題的分治算法
該文以搜索為例,搜索是指在一個(gè)排好序的數(shù)組中尋找與給定數(shù)值x相等的元素,很容易想到的方法是將數(shù)組遍歷,但是遍歷的復(fù)雜度為O(n),當(dāng)數(shù)組的規(guī)模n很大時(shí),查找次數(shù)將會(huì)很大。
二分搜索是將數(shù)組每次分為相等的兩部分,將待查元素x與數(shù)組中點(diǎn)處的元素a[n/2]比較,若a[n/2]=x則搜索成功;若a[n/2]>x,則待查元素x在數(shù)組左半?yún)^(qū);若a[n/2] 根據(jù)分治策略的研究可以想到,如果每次將數(shù)組分為相等的更多部分,比如三部分甚至是k部分,算法性能還會(huì)不會(huì)有所提升。每次將數(shù)組分為更多的部分,則每趟查找能夠?qū)?shù)組縮小到更小的范圍,然而每趟需要進(jìn)行額外的查找,從定性分析的角度,總的查找次數(shù)增加或減少均是有可能的。隨著k的增加,平均查找次數(shù)可能先減少,達(dá)到最低后再增加;也有可能一直增加,后續(xù)將從定量分析的角度,對(duì)k分搜索的時(shí)間復(fù)雜度進(jìn)行證明。 該文將對(duì)二分、三分、四分搜索所需的平均查找次數(shù)進(jìn)行復(fù)雜度分析,并進(jìn)行比較,尋找規(guī)律,最后分析出k分搜索的時(shí)間復(fù)雜度。通過(guò)將每種情況下的查找次數(shù)求和并平均,得到算法的平均查找次數(shù),進(jìn)而得到其時(shí)間復(fù)雜度??梢宰C明,k分搜索的時(shí)間復(fù)雜度為O(klogkn),易知klogkn是單調(diào)遞增函數(shù),因此二分搜索是效率最高的算法。此外,當(dāng)k=n時(shí),k分搜索退化為遍歷,時(shí)間復(fù)雜度退化為O(n)。 在本節(jié)中,首先通過(guò)分析平均查找次數(shù)的方式分析二分搜索的時(shí)間復(fù)雜度,然后按照相同的方式分析三分搜索的時(shí)間復(fù)雜度,最后對(duì)比兩種算法在實(shí)際數(shù)據(jù)下所需要的查找次數(shù),并分析兩者復(fù)雜度差異的原因,為尋找k分搜索的規(guī)律做鋪墊。 258 Analysis of health-related quality of life of elderly people living alone in Shanghai 二分搜索法,是通過(guò)不斷縮小解可能存在的范圍,從而求得問(wèn)題最優(yōu)解的方法。二分搜索可應(yīng)用于二叉搜索樹(shù)、密度峰聚類(lèi)、網(wǎng)絡(luò)拓?fù)涮綔y(cè)等算法,相關(guān)研究如文獻(xiàn)[6-9]。二叉搜索樹(shù)的左子樹(shù)若不為空,則其上的所有節(jié)點(diǎn)的值均小于根節(jié)點(diǎn),同樣,若右子樹(shù)不為空,則其上的所有節(jié)點(diǎn)的值均大于根節(jié)點(diǎn)。二叉搜索樹(shù)便是利用了二分搜索的性質(zhì),既能夠快速地查找,又能方便地添加與刪除節(jié)點(diǎn),是一種高效的數(shù)據(jù)結(jié)構(gòu)。 二分搜索能夠應(yīng)用于兩種常見(jiàn)的問(wèn)題中:一是應(yīng)用于最優(yōu)解問(wèn)題,求最小的x使得x滿(mǎn)足條件M(x),可以用二分搜索來(lái)求得最小的x[10];二是在有序數(shù)列中查找值,即在一個(gè)排好序的數(shù)列中尋找與給定值相等的元素。該文主要通過(guò)后者來(lái)分析二分搜索的時(shí)間復(fù)雜度以推出k分搜索的時(shí)間復(fù)雜度。 社會(huì)期望作為一項(xiàng)重要的人格特證,是兒童社會(huì)性發(fā)展的重要方面,在兒童的成長(zhǎng)發(fā)展中發(fā)揮著不可忽視的作用。兒童的社會(huì)期望不僅與兒童的學(xué)業(yè)成績(jī)和學(xué)校表現(xiàn)有著密切關(guān)系[3],也會(huì)影響兒童對(duì)自我的評(píng)價(jià)[4]和安全依戀的形成[5]。因此,有必要對(duì)小學(xué)兒童的社會(huì)期望水平進(jìn)行調(diào)查,對(duì)其發(fā)展?fàn)顩r進(jìn)行系統(tǒng)全面的分析研究,進(jìn)而為兒童的家庭和學(xué)校教育提供可能的參考依據(jù)。 二分搜索的方法如圖2所示,先將待查元素x與二分之一處的元素比較,若相等,則查找成功;若該元素大于x,則繼續(xù)在數(shù)組左半?yún)^(qū)查找;若該元素小于x,則繼續(xù)在數(shù)組右半?yún)^(qū)查找。這樣每次都可以將搜索范圍縮小一半。 圖2 二分搜索的過(guò)程 50例ASO患者實(shí)驗(yàn)觀察指標(biāo)以SPSS19.0計(jì)算。護(hù)理工作滿(mǎn)意度以%形式展開(kāi),采用χ2檢驗(yàn);飲食知識(shí)掌握以及護(hù)理知識(shí)掌握評(píng)分以(±s)形式展開(kāi),進(jìn)行t檢驗(yàn)。P<0.05證明差異有統(tǒng)計(jì)學(xué)意義。 1. low←1;high←n;j←0; 2. while(low≤high)and(j=0); 3. mid←(low+high)/2; 2.3 孕晚期血清sFlt-1、PLGF及其比值與子癇前期發(fā)病時(shí)間的關(guān)系 在11例發(fā)病的高危孕婦中有早發(fā)型子癇前期孕婦2例,晚發(fā)型子癇前期孕婦9例。早發(fā)型子癇前期組血清log(sFlt-1)的均值為3.82 pg/ml,晚發(fā)型組為3.29 pg/ml。血清log(PLGF)的均值在早發(fā)型及晚發(fā)型子癇前期組中分別為1.83 pg/ml、2.27 pg/ml。血清log(sFlt-1/PLGF)比值在早發(fā)型及晚發(fā)型子癇前期組中均值分別為1.99、1.01。因早發(fā)型子癇前期組孕婦例數(shù)過(guò)少,數(shù)據(jù)不符合正態(tài)分布,未進(jìn)行統(tǒng)計(jì)學(xué)分析。 卞遷與齊薇(卞遷,齊薇等,2009)指出目前最常用的眼動(dòng)記錄方法是無(wú)創(chuàng)的視頻記錄法。利用眼動(dòng)儀進(jìn)行研究時(shí)測(cè)試參數(shù)一般包括:注視點(diǎn)軌跡圖、熱點(diǎn)圖、關(guān)注區(qū)域、注視點(diǎn)個(gè)數(shù)、首個(gè)注視點(diǎn)的注視時(shí)長(zhǎng)、首次進(jìn)入AOI的時(shí)間、每次訪(fǎng)問(wèn)的平均時(shí)間等。一項(xiàng)研究應(yīng)根據(jù)研究?jī)?nèi)容和研究目標(biāo)選擇2-3個(gè)測(cè)試參數(shù)。 S=(i-1)×2i+1 5. else ifx 6. else low←mid+1; 7. end while; 8. returnj。 要堅(jiān)持走開(kāi)放型、創(chuàng)新型和高端化、信息化、綠色化發(fā)展的新路子,構(gòu)建現(xiàn)代產(chǎn)業(yè)新體系,從中尋找突破口和切入點(diǎn),做好產(chǎn)業(yè)轉(zhuǎn)型升級(jí)的統(tǒng)籌規(guī)劃,進(jìn)一步明晰產(chǎn)業(yè)轉(zhuǎn)型升級(jí)的總體思路、目標(biāo)任務(wù)、方向路徑、工作重點(diǎn)和落實(shí)機(jī)制,揚(yáng)長(zhǎng)避短發(fā)揮比較優(yōu)勢(shì),加快推動(dòng)產(chǎn)業(yè)結(jié)構(gòu)由中低端向中高端邁進(jìn)。推進(jìn)高原特色農(nóng)業(yè)現(xiàn)代化,促進(jìn)三大產(chǎn)業(yè)融合發(fā)展,提高質(zhì)量效益和競(jìng)爭(zhēng)力。實(shí)施“中國(guó)制造2025”云南行動(dòng)計(jì)劃,有選擇性地承接?xùn)|部地區(qū)出口加工業(yè)轉(zhuǎn)移,探索“共建園區(qū)”或“飛地經(jīng)濟(jì)”,實(shí)行引進(jìn)產(chǎn)業(yè)與本地特色有優(yōu)勢(shì)產(chǎn)業(yè)的有機(jī)融合、聯(lián)動(dòng)發(fā)展。 圖3所示為二分查找過(guò)程的判定樹(shù),要在一個(gè)有序數(shù)列[2 4 6 9 11 15 18 22 24 31 35]中尋找值為22的元素,首先將22與數(shù)組中點(diǎn)處的元素15比較,22大于15,則待查元素在數(shù)列右半?yún)^(qū);再將其與數(shù)列右半?yún)^(qū)中點(diǎn)處的元素24比較,發(fā)現(xiàn)22小于24,則繼續(xù)在左半?yún)^(qū)查找;而22大于左半?yún)^(qū)中點(diǎn)處的元素18,則繼續(xù)在右半?yún)^(qū)查找,最終找到22。 圖3 二分搜索查找過(guò)程的判定樹(shù) 時(shí)間復(fù)雜度的分析以分析每個(gè)元素被查找到的概率的方式進(jìn)行。經(jīng)過(guò)1次查找就能被找到的元素個(gè)數(shù)為20,經(jīng)過(guò)2次查找就能被找到的元素個(gè)數(shù)為21,以此類(lèi)推,經(jīng)過(guò)i次查找就能被找到的元素個(gè)數(shù)為2i-1。設(shè)S為所有元素被查找到所需要的總次數(shù),則有: S=1×20+2×21+3×22+…+(i-1)× S=1×30+2×31+3×32+…+(i-1)× (1) 通過(guò)錯(cuò)位相減法可以求解式(1),得到: 4. ifx=A[mid] thenj←mid; (2) 由1+2+4+…+2i-1=2i-1≥n,可以得到i≤log2(n+1),代入式(2)可得: S≤(log2(n+1)-1)(n+1)+1 (3) 每個(gè)元素被查找到的概率為1/n,則時(shí)間復(fù)雜度T(n)=S/n,代入得: 11. end while (4) 即二分搜索平均查找次數(shù)的時(shí)間復(fù)雜度為log2(n+1)-1。通過(guò)圖4可以看出,二分搜索與線(xiàn)性查找相比,時(shí)間復(fù)雜度由O(n)降到了O(log2n),效率得到了明顯的提升。 圖4 二分搜索與遍歷的時(shí)間復(fù)雜度的比較 利用二分搜索高效查找的性質(zhì),能夠?qū)⒍炙阉鲬?yīng)用于一種數(shù)據(jù)結(jié)構(gòu)即二叉搜索樹(shù),又稱(chēng)二分搜索樹(shù)、二叉排序樹(shù),如圖5所示。二叉搜索樹(shù)是一種二叉樹(shù),對(duì)于樹(shù)中的每一個(gè)節(jié)點(diǎn),若其左子樹(shù)存在,則根節(jié)點(diǎn)的值不小于其左子樹(shù)中每一個(gè)節(jié)點(diǎn)的值;若其右子樹(shù)存在,則根節(jié)點(diǎn)的值不大于其右子樹(shù)中每一個(gè)節(jié)點(diǎn)的值,二叉搜索樹(shù)的相關(guān)研究如文獻(xiàn)[11-14]。若二叉搜索樹(shù)為滿(mǎn)二叉樹(shù),則其搜索的時(shí)間復(fù)雜度為O(log2n),若每層只有一個(gè)節(jié)點(diǎn),則復(fù)雜度為O(n),因此二叉搜索樹(shù)的時(shí)間復(fù)雜度為O(log2n)~O(n)。 (5) 而二分搜索平均僅需20次即可查找成功,極大地提高了算法的性能。 丁珰又道:“天哥他確有過(guò)犯,自己送了命也就罷了,最可惜石莊主夫婦這等俠義仁厚之人,卻也要賠上兩條性命?!?/p> 例如,對(duì)一個(gè)規(guī)模為1e6的問(wèn)題,遍歷需要的平均查找次數(shù)為: 豎爐密封性較好,通常難以知曉豎爐內(nèi)部爐墻的實(shí)際工況,可使用Raytek手持式紅外測(cè)溫儀檢測(cè)銅磚部位的溫度,且關(guān)注超過(guò)500 ℃的狀況,再根據(jù)爐殼發(fā)紅現(xiàn)象進(jìn)行綜合判斷,該測(cè)溫儀具有響應(yīng)時(shí)間快、非接觸、操作簡(jiǎn)單、使用安全及壽命長(zhǎng)等優(yōu)點(diǎn)。 二分搜索的偽代碼如下: 圖5 二叉搜索樹(shù) 二叉搜索樹(shù)能夠做到與線(xiàn)性二分查找一樣的時(shí)間復(fù)雜度O(log2n)。線(xiàn)性二分查找需要保證待查序列是單調(diào)的,因此增加或者刪除節(jié)點(diǎn)時(shí),需要較多的操作;而二分搜索樹(shù)能夠高效地對(duì)節(jié)點(diǎn)進(jìn)行增加或者刪除操作,是對(duì)二分搜索進(jìn)行優(yōu)化的一種數(shù)據(jù)結(jié)構(gòu)。 后續(xù)將繼續(xù)分析,若將問(wèn)題劃分為更多的子問(wèn)題,即二分搜索、k分搜索,能否更好地提升搜索算法的性能。 三分搜索的方法如圖6所示,先將待查元素x與三分之一處的元素比較,然后將x與三分之二處的元素進(jìn)行比較[15]。若相等,則搜索成功;若x小于第一個(gè)元素,則繼續(xù)在左三分之一部分查找;若x大于第一個(gè)元素小于第二個(gè)元素,則繼續(xù)在中間三分之一部分查找;若x大于第二個(gè)元素,則繼續(xù)在右三分之一部分查找。 圖6 三分搜索的過(guò)程 三分搜索每次能將查找范圍縮小三分之一,繼續(xù)查找,直到找到待查元素x。 現(xiàn)代服裝設(shè)計(jì)中創(chuàng)新應(yīng)用傳統(tǒng)文化元素與藝術(shù)價(jià)值,第一個(gè)必要性體現(xiàn)在,這是現(xiàn)代服裝設(shè)計(jì)創(chuàng)新突破的需要。民族的也是世界的,傳統(tǒng)文化為當(dāng)代的服裝設(shè)計(jì)提供了源源不斷的設(shè)計(jì)思路和設(shè)計(jì)理念,面對(duì)著當(dāng)前高速發(fā)展的時(shí)代和服裝設(shè)計(jì)行業(yè)的加速更新和變革,行業(yè)內(nèi)部的更新?lián)Q代以及行業(yè)內(nèi)部的競(jìng)爭(zhēng)也愈發(fā)的激烈,面對(duì)這樣的現(xiàn)實(shí)狀況,現(xiàn)代服裝設(shè)計(jì)師在日常工作的過(guò)程當(dāng)中所需要巨大的靈感,而這些靈感則必須是要適應(yīng)市場(chǎng)的,有可落地實(shí)施的價(jià)值的,基于這樣的現(xiàn)實(shí)考量,從傳統(tǒng)文化當(dāng)中吸取營(yíng)養(yǎng)就顯得非常必要。 其偽代碼如下: 1. low←1;high←n;j←0; 2. while(low≤high)and(j=0); 3. midl←low+(high-low)/3; 4. midr←low+2(high-low)/3; 5. ifx 由于委派制在某種程度上的“過(guò)渡性”和“不徹底性”,審計(jì)人員的專(zhuān)業(yè)化、系統(tǒng)化的培訓(xùn)較少,人員專(zhuān)業(yè)素養(yǎng)提升較慢,難以勝任日益復(fù)雜的審計(jì)業(yè)務(wù)要求。 6. else ifx=A[midl] thenj←midl; 7. else;1 二分搜索與三分搜索
1.1 二分搜索
1.2 三分搜索
計(jì)算機(jī)技術(shù)與發(fā)展2021年2期