中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

建立網(wǎng)站的目的是什么怎么下載需要會員的網(wǎng)站視頻

建立網(wǎng)站的目的是什么,怎么下載需要會員的網(wǎng)站視頻,廣州網(wǎng)站推廣多少錢,網(wǎng)店美工課程標(biāo)準(zhǔn)五、如果用go語言,當(dāng)輸入數(shù)據(jù)已經(jīng)“幾乎有序”時,插入排序速度很快。在實際應(yīng)用中,我們可以利用這一特點來提高快速排序的速度。當(dāng)對一個長度小于 k 的子數(shù)組調(diào)用快速排序時,讓它不做任何排序就返回。當(dāng)上層的快速排序調(diào)用返回后&…

五、如果用go語言,當(dāng)輸入數(shù)據(jù)已經(jīng)“幾乎有序”時,插入排序速度很快。在實際應(yīng)用中,我們可以利用這一特點來提高快速排序的速度。當(dāng)對一個長度小于 k 的子數(shù)組調(diào)用快速排序時,讓它不做任何排序就返回。當(dāng)上層的快速排序調(diào)用返回后,對整個數(shù)組運(yùn)行插人排序來完成排序過程。試證明:這一排序算法的期望時間復(fù)雜度為 O(nk+nlg(n/k))。分別從理論和實踐的角度說明我們應(yīng)該如何選擇 k?

文心一言:

首先,我們來證明這個算法的期望時間復(fù)雜度。

對于長度為 n 的數(shù)組,我們需要對其進(jìn)行 k 次分割。每次分割的期望時間復(fù)雜度是 O(n/k),因為每次分割我們將數(shù)組分成兩個部分,一個部分的長度為 n/2,另一個部分的長度為 n/2 + k。對于這個分割,我們需要遍歷 k 個元素并找到其正確的位置。因此,分割的期望時間復(fù)雜度是 O(k)。

對于每次分割,我們需要對兩個部分分別進(jìn)行排序。對于長度為 n/2 + k 的部分,我們可以使用插入排序,其時間復(fù)雜度是 O(n/2 + k) * O(k) = O(nk)。對于長度為 n/2 的部分,我們可以使用快速排序,其期望時間復(fù)雜度是 O((n/2)lg(n/2))。因此,對整個數(shù)組進(jìn)行排序的期望時間復(fù)雜度是 O(nk + (n/2)lg(n/2))。

我們可以進(jìn)一步優(yōu)化這個算法。對于長度小于 k 的子數(shù)組,我們可以直接使用插入排序。因此,我們只需要在每次分割后對長度大于等于 k 的子數(shù)組使用快速排序,這樣就可以避免對長度小于 k 的子數(shù)組進(jìn)行排序。

對于長度大于等于 k 的子數(shù)組,我們可以使用快速排序的遞歸調(diào)用。每次遞歸調(diào)用都會將子數(shù)組的長度減半,直到子數(shù)組的長度小于 k。然后,我們可以使用插入排序?qū)ψ訑?shù)組進(jìn)行排序。

因此,對整個數(shù)組進(jìn)行排序的期望時間復(fù)雜度是 O(nk + (n - k)lg(n/k))。

在理論和實踐上,我們應(yīng)該如何選擇 k 呢?

在理論上,我們希望 k 能夠盡可能地小,這樣可以盡可能地減少使用快速排序的時間復(fù)雜度。同時,我們也希望 k 能夠盡可能地大,這樣可以盡可能地減少使用插入排序的時間復(fù)雜度。因此,在理論上,最優(yōu)的 k 應(yīng)該是 n^(1/2)。

在實踐中,我們需要注意以下幾點:

k 不能太小,否則會導(dǎo)致插入排序的時間復(fù)雜度過高。

k 不能太大,否則會導(dǎo)致快速排序的時間復(fù)雜度過高。

我們需要根據(jù)實際的情況進(jìn)行調(diào)整,例如數(shù)據(jù)的大小、數(shù)據(jù)分布等情況。

因此,在實際應(yīng)用中,我們通常會將 k 設(shè)置為一個合適的值,例如 n^(1/3) 或者 n^(1/4) 等。

在這里插入圖片描述

訊飛星火:

首先,我們來證明這一排序算法的期望時間復(fù)雜度為 O(nk+nlg(n/k))。

1.理論角度:

假設(shè)快速排序的平均時間復(fù)雜度為 T(n),那么插入排序的時間復(fù)雜度為 O(n^2)。當(dāng)子數(shù)組長度小于 k 時,插入排序的速度很快,因此我們可以讓快速排序在 k 個子數(shù)組上運(yùn)行,而對剩余的 n-k 個子數(shù)組使用插入排序。這樣,總的時間復(fù)雜度為:

T(n) = (T(n/k) * k + O(n^2)) * (n - k) + O(n^2)

根據(jù)平均時間復(fù)雜度的定義,我們有:

T(n) = n * T(n/k) + O(n^2)

解這個方程,我們可以得到:

T(n) = O(nk + nlg(n/k))

2.實踐角度:

在實際使用中,我們需要根據(jù)數(shù)據(jù)的特點來選擇合適的 k 值。一般來說,我們可以通過以下方法來選擇 k:

a. 通過實驗找到最佳的 k 值。可以先嘗試不同的 k 值,然后觀察排序速度和內(nèi)存占用的變化,選擇一個在性能和內(nèi)存占用之間達(dá)到平衡的 k 值。

b. 根據(jù)數(shù)據(jù)的特點來估計 k 值。例如,如果我們知道數(shù)據(jù)是幾乎有序的,那么我們可以選擇一個較大的 k 值,以利用插入排序的速度優(yōu)勢。相反,如果數(shù)據(jù)是隨機(jī)無序的,那么我們可能需要選擇一個較小的 k 值,以避免快速排序的性能下降。

總之,通過結(jié)合理論分析和實踐經(jīng)驗,我們可以選擇合適的 k 值來提高快速排序算法的性能。

在這里插入圖片描述

360智腦:

首先,我們可以將快速排序的過程抽象為一個遞歸函數(shù) Qsort(n),其中輸入為一個非負(fù)整數(shù) n。Qsort 函數(shù)接受一個參數(shù) k,表示待排序數(shù)組的長度,如果 k 等于 n,則直接返回原數(shù)組;否則,將 k 作為基準(zhǔn)值,將數(shù)組分成長度小于 k 和長度大于等于 k 的兩個子數(shù)組,然后遞歸地對這兩個子數(shù)組進(jìn)行排序。具體實現(xiàn)如下:


func Qsort(n int, k int) []int { if n <= k { return []int{} } if n == k { return []int{0, 1, 2, ..., k-1} } pivot := []int{0, 1, 2, ..., k-1} left := []int{} right := []int{} for i := range right { if right[i] < pivot { left = append(left, right[i]) } else if right[i] >= pivot { right[i], right = right[i] + 1, right[i] } } right, right = left, right[:len(left)] Qsort(len(right), len(pivot)+k-len(right)) Qsort(len(right), k-len(right)+1) return right 

接下來,我們來證明這一算法的期望時間復(fù)雜度為 O(nk+nlg(n/k))。

首先,我們考慮最壞情況。在最壞情況下,每次遞歸調(diào)用 Qsort 函數(shù)時,都會將數(shù)組分為長度為 k 和長度不為 k 的兩個子數(shù)組。因此,最多需要進(jìn)行 k 個子序列對的快速排序。這樣,期望時間復(fù)雜度是 O(nk),即 O(n^2)。

其次,我們考慮平均情況。在平均情況下,每次遞歸調(diào)用 Qsort 函數(shù)時,都恰好將數(shù)組分為長度為 k 和長度不為 k 的兩個子數(shù)組的概率相等。因此,期望時間復(fù)雜度仍然是 O(nk)。但是,由于最壞情況的概率較低,因此在實際應(yīng)用中,我們可以選擇較大的 k 來避免最壞情況的出現(xiàn)。

最后,我們需要選擇 k 的取值來滿足以下條件:nk > nlg(n/k)。當(dāng) k 取較小的值時,快速排序的時間復(fù)雜度可能會超過 O(n^2),而在 k 取較大的值時,插入排序的時間復(fù)雜度可能會超過 O(n^2)。因此,我們可以根據(jù)具體情況選擇 k = O(sqrt(n)) 或 k = O(n/log(n)) 等合適的取值。

在這里插入圖片描述

在這里插入圖片描述

chatglm:

首先,我們需要理解這個問題背后的算法。這里提到的算法其實是快速排序(Quick Sort)和插入排序(Insertion Sort)的結(jié)合。在實際應(yīng)用中,我們可以在某些情況下利用快速排序和插入排序的特性來提高排序速度。

快速排序的基本思想是通過選擇一個基準(zhǔn)元素(pivot),將數(shù)組分為兩個子數(shù)組,其中一個子數(shù)組的元素都小于基準(zhǔn)元素,另一個子數(shù)組的元素都大于基準(zhǔn)元素。然后對這兩個子數(shù)組遞歸地進(jìn)行快速排序。

插入排序的基本思想是將無序的元素插入到有序的序列中,直到所有元素都插入完成。
在“幾乎有序”的情況下,插入排序的速度是很快的。因此,當(dāng)對一個長度小于 k 的子數(shù)組調(diào)用快速排序時,讓它不做任何排序就返回。當(dāng)上層的快速排序調(diào)用返回后,對整個數(shù)組運(yùn)行插入排序來完成排序過程。

要證明這一排序算法的期望時間復(fù)雜度為 O(nk+nlg(n/k)),我們需要分析快速排序和插入排序的運(yùn)行時間。

對于快速排序,其平均時間復(fù)雜度為 O(nlogn),但在最壞的情況下,時間復(fù)雜度為 O(n^2)。當(dāng)子數(shù)組的長度小于 k 時,快速排序的運(yùn)行時間可以忽略不計,所以我們只需要考慮快速排序在子數(shù)組長度大于等于 k 時的運(yùn)行時間。

對于插入排序,其時間復(fù)雜度為 O(n^2),但我們只需要對長度小于 k 的子數(shù)組進(jìn)行插入排序,所以插入排序的運(yùn)行時間可以表示為 O(n*k)。

因此,整個排序算法的期望時間復(fù)雜度可以表示為 O(n*k) + O(nlogn) = O(nk+nlg(n/k))。

從理論角度,我們應(yīng)該選擇 k 使得 n/k 最接近于 sqrt(n),這樣 nlg(n/k) 可以達(dá)到最小。因為我們希望快速排序在子數(shù)組長度大于等于 k 時運(yùn)行時間盡可能短,所以我們應(yīng)該選擇 k 接近于 sqrt(n)。

從實踐角度,我們需要考慮實際運(yùn)行時間,而不僅僅是時間復(fù)雜度。在選擇 k 時,我們可以通過觀察運(yùn)行時間來選擇最佳的 k 值。具體方法可以是在固定大小的數(shù)組上運(yùn)行不同 k 值的排序算法,并記錄運(yùn)行時間,然后選擇運(yùn)行時間最短的 k 值。

在這里插入圖片描述

通義千問:

首先,我們來證明一下這個排序算法的期望時間復(fù)雜度。

設(shè)子數(shù)組長度為 k,快速排序的平均時間復(fù)雜度為 O(nlogn),而插入排序的時間復(fù)雜度為 O(n)。因為我們只在最后一次調(diào)用快速排序時才對整個數(shù)組進(jìn)行插入排序,所以總的時間復(fù)雜度為:

O(nlogn + n) = O(nlogn + nlogk)

現(xiàn)在我們來討論如何選擇 k。從理論上講,如果我們能夠選擇 k,使得子數(shù)組長度 k 近似于 n 的對數(shù),那么這種優(yōu)化后的快速排序的時間復(fù)雜度將接近于 O(nloglogn)。但是,選擇 k 的方法并不是很明確。

在實踐中,我們通常選擇 k = n/2。這是因為在實際應(yīng)用中,我們往往遇到的是接近有序的數(shù)據(jù),這樣就能確保子數(shù)組長度為 n/2 時,快速排序的效率較高。同時,對于長度為 n/2 的子數(shù)組,插入排序的時間復(fù)雜度為 O(n/2),所以總的時間復(fù)雜度為 O(nlogn + n/2) ≈ O(nlogn)。

總之,從理論上講,我們應(yīng)該選擇 k 使得子數(shù)組長度接近 n 的對數(shù),但在實踐中,選擇 k = n/2 通常是一個較好的折中方案。

在這里插入圖片描述

天工:

從理論角度,我們可以證明插入排序在長度小于 k 的子數(shù)組中的時間復(fù)雜度是 O(n),而快速排序在整個數(shù)組上的時間復(fù)雜度是 O(nlogn)。因此,在對長度小于 k 的子數(shù)組進(jìn)行快速排序時,期望時間復(fù)雜度為 O(n) * O(nlogn),即 O(nlogn)。

從實踐角度,我們可以通過實驗來確定 k 的值。我們可以先嘗試不同的 k 值,然后統(tǒng)計每種情況下的排序時間。我們可以選擇 k 的值,使得排序時間最短,同時保證排序的穩(wěn)定性。通常情況下,k 的值可以選擇為 n/16,這樣可以在保證穩(wěn)定性的同時,獲得較快的排序速度。

在這里插入圖片描述

chatgpt:

為了證明這一排序算法的期望時間復(fù)雜度為O(nk+nlog(n/k)),我們需要分別從理論和實踐的角度進(jìn)行說明。

從理論角度:

首先,快速排序的時間復(fù)雜度為O(nlogn),其中n是輸入數(shù)組的長度。在快速排序的過程中,我們將輸入數(shù)組分為兩個子數(shù)組,并選擇一個主元(pivot)將其放置在正確的位置上。然后,對子數(shù)組進(jìn)行遞歸排序。

當(dāng)輸入數(shù)據(jù)已經(jīng)“幾乎有序”時,如果子數(shù)組的長度小于k,則直接返回,不做任何排序。因此,這部分的時間復(fù)雜度是O(1)。

當(dāng)子數(shù)組的長度大于等于k時,我們進(jìn)行常規(guī)的快速排序過程,將主元放置在正確的位置上,并對兩個子數(shù)組進(jìn)行遞歸排序。

因此,我們可以得到以下關(guān)系式:

T(n) = T(n/k) + O(n) + T(n - n/k - 1)

其中T(n)表示對長度為n的數(shù)組進(jìn)行排序所需要的時間。

按照主定理(Master Theorem),我們可以得到這個遞歸關(guān)系式的解為O(nlog(n/k))。

同時,當(dāng)子數(shù)組的長度小于k時,我們對整個數(shù)組使用插入排序。插入排序的時間復(fù)雜度為O(n),因為每次插入操作都需要掃描已排好序的部分來確定插入位置。

因此,對于長度為n的數(shù)組,排序的時間復(fù)雜度可以表示為O(nk + nlog(n/k))。

從實踐角度:

選擇合適的k值可以在實踐中提高算法的性能。

當(dāng)輸入數(shù)據(jù)已經(jīng)“幾乎有序”時,如果k的取值較小,例如k=10,對于較小的子數(shù)組而言,插入排序比快速排序更有效。因此,快速排序的遞歸深度將較淺,最后對整個數(shù)組應(yīng)用插入排序的次數(shù)也較少。

然而,如果k的取值過小,可能會導(dǎo)致遞歸的次數(shù)較多,增加了函數(shù)調(diào)用的開銷。因此,k的取值應(yīng)該適當(dāng),使得在絕大多數(shù)情況下,插入排序都能夠充分發(fā)揮其優(yōu)勢,而遞歸的次數(shù)保持在一個較小的范圍內(nèi)。

選擇合適的k值可以通過實驗來確定,可以通過對不同k值運(yùn)行排序算法,并比較它們的性能來找到最佳的取值。根據(jù)實際情況,k的取值通常在10到20之間。

綜上所述,對于已經(jīng)“幾乎有序”的輸入數(shù)據(jù),使用這一排序算法的期望時間復(fù)雜度為O(nk+nlog(n/k)),并且我們可以根據(jù)實踐中的性能測試來選擇合適的k值。

在這里插入圖片描述

總結(jié)

quicksort在遞歸到只有幾個元素大小的數(shù)組時開始用插入排序的方法。改進(jìn)的快速排序方法在

期望時間=原始快排的期望時間+插入排序方法的期望時間。

這里還是要用到7.4(算法導(dǎo)論第7章)的分析方法。對于快排還要計算期望比較次數(shù)。

因為被劃分在同一個小數(shù)組k中的元素,是不會在快排里比較的。所以Xij只要計算那些i和j相差k-1個以上的元素比較就可以了。

定義一個元素集合Zij={zi,zi+1,zj}

定義一個指示器隨機(jī)變量Xij=I{zi與zj進(jìn)行了比較}

E[Xij]=Pr[Xij]=Pr{zi與zj進(jìn)行了比較}=Pr{zi是Zij的主元}+Pr{zj是Zij的主元}=2/(j-i+1)//因為在快排中,二者能夠比較,則其中一個必是主元

快速排序的期望比較次數(shù)E[Xij]為

在這里插入圖片描述

那么快排的期望時間是O(nlg(n/k)),假設(shè)優(yōu)化后的快排產(chǎn)生的小數(shù)組大小O(k),在每個大小O(k)的小數(shù)組里使用插入排序,時間復(fù)雜度為O(k^2),總共有O(n/k)個小數(shù)組,則插入排序時間為O(nk)。那么把這些時間加起來就是O(nk+nlog(n/k))。

http://m.risenshineclean.com/news/61101.html

相關(guān)文章:

  • 經(jīng)營性網(wǎng)站icp哪家網(wǎng)站優(yōu)化公司好
  • 廣州響應(yīng)式網(wǎng)站建設(shè)seo基礎(chǔ)
  • 網(wǎng)站開發(fā)與維護(hù)的崗位特點職責(zé)seo網(wǎng)站內(nèi)部優(yōu)化方案
  • 汕頭網(wǎng)站設(shè)計電話中國十大熱門網(wǎng)站排名
  • 騰訊云cdn加速wordpress澤成seo網(wǎng)站排名
  • 做網(wǎng)站用什么軟件免費(fèi)安徽搜索引擎優(yōu)化seo
  • 機(jī)構(gòu)單位網(wǎng)站建設(shè)方案寧波網(wǎng)站推廣公司價格
  • php網(wǎng)站開發(fā)教程網(wǎng)手機(jī)優(yōu)化大師下載
  • 廣州網(wǎng)站開發(fā)報價seo搜索引擎優(yōu)化是通過優(yōu)化答案
  • 網(wǎng)絡(luò)營銷的四大要素浙江seo博客
  • 網(wǎng)站搭建招標(biāo)方案域名被墻檢測
  • 自己怎么做可以讓百度收錄的網(wǎng)站網(wǎng)站的推廣方法
  • 企業(yè)網(wǎng)站seo優(yōu)化怎么做索引擎優(yōu)化 seo
  • 電影網(wǎng)站建設(shè) 流程seo按照搜索引擎的什么對網(wǎng)站
  • 建材公司網(wǎng)站建設(shè)方案省委副書記
  • 民權(quán)網(wǎng)站建設(shè)網(wǎng)站推廣的方式有哪些?
  • 網(wǎng)站建設(shè)現(xiàn)在主要做些什么成品影視app開發(fā)
  • 境外網(wǎng)站搭建谷歌seo技巧
  • 在網(wǎng)站制作前需要有哪些前期策劃工作長沙互聯(lián)網(wǎng)網(wǎng)站建設(shè)
  • iis的網(wǎng)站默認(rèn)端口如何讓百度收錄
  • 網(wǎng)站建設(shè)要做哪些工作室如何發(fā)布自己的html網(wǎng)站
  • 網(wǎng)站開發(fā)有哪些工作崗位搜索引擎優(yōu)化哪些方面
  • 邯鄲網(wǎng)站建設(shè)兼職網(wǎng)址模板建站
  • 交易平臺網(wǎng)站建設(shè)策劃書深圳seo網(wǎng)絡(luò)推廣
  • 做外貿(mào)的網(wǎng)站主要有哪些搜索指數(shù)查詢平臺
  • wordpress建雙語網(wǎng)站手機(jī)百度賬號申請注冊
  • 建設(shè)公積金網(wǎng)站百度輸入法免費(fèi)下載
  • 東莞建設(shè)銀行官方網(wǎng)站重慶網(wǎng)站seo診斷
  • 做的網(wǎng)站 顯示亂碼google關(guān)鍵詞seo
  • 怎么建立和設(shè)計網(wǎng)站推推蛙seo顧問