【算法簡介】平攤分析


【算法簡介】平攤分析

1. 簡述

平攤分析是指在某種數據結構上完成一系列操作,在最壞情況下所需的平均時間

平攤分析與傳統分析方法的主要差別為:

1)平攤分析時間與傳統分析方法的平均情況下時間不同,它是最壞情況下的平均時間。

2)平攤分析不涉及概率分析。

3)平攤分析中時間函數T(n),其中n指的是操作的次數,而不是輸入的規模。

常見的有三種方法:聚集法、記賬法、勢能法。

2. 合計法(聚集法)

2.1 合計法的思想:把n個不同或相同的操作合在一起加以分析計算得到總時間的方法。即n個操作序列在最壞情況下的總時間,記為T(n),其中n為操作數。由此得到在最壞情況下每個操作的平均時間為T(n)/n。

2.2 例子說明:棧操作的平攤分析(不同類操作)

操作 代價
PUSH 1
POP 1
MULTIPOP min(k,s)

解法一,傳統方法分析:

由於三個操作最壞的操作為multipop操作,而一次multipop操作在最壞情況下的時間為O(n),如果n個操作均為multipop操作,則總時間將達到O(n^2)。

在最壞情況下n個操作的總時間T(n)= O(n^2),每個操作的平攤時間為:T(n)/n=O(n)。

解法二,合計法分析:

由於三個操作不是相互獨立的,一個對象入棧后最多彈出一次,因而在非空棧S上完成的pop次數(包括multipop操作)最多為push的次數,又由於初始棧S為空,且n個操作中push的次數≤n,pop次數≤n,由於每個push和pop操作的實際代價為O(1),所以n次操作在最壞情況下的總時間≤2n=O(n),每個操作的平攤時間為T(n)/n=O(1)。

2 記賬法

記帳法思想:先對每個不同的操作核定一個不同的費用(時間),然后計算n次操作總的費用。當然,由於這個費用是人為賦予的,所以很容易得到一個松上界。

這種事先的操作費用核定可能與實際費用不符,存在二種情況:

1)超額收費:核定費用>實際費用,此時差額存放在該對象的身上。

2)收費不足:核定費用<實際費用,此時差額由該對象身上的存款支付。

費用的核定(平攤核定)是否正確需檢查n次操作核定總費用是否大於n次操作實際總費用(這里n具有任意性,並不是單指一個定值n)。因此,在記賬方法中,某些操作的費用比它們實際代價或多或少。但push、pop、multipop操作的平攤時間為O(1)。

3 勢能法

思想:通過定義一個勢函數完成對每個操作的平攤核定。

勢是與整個數據結構聯系而不是其中的個別對象發生聯系的。且push、pop、multipop操作的平攤時間為O(1)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM