天天看點

資料結構 實用概念和算法 31.資料結構的基本概念2.資料的邏輯結構3.資料的實體結構4.資料的運算(操作或處理)5.算法

目錄:

資料結構實用概念

1)資料結構中的基本概念            2)資料的邏輯結構

3)資料的實體結構                       4)資料的運算

算法

1)算法概念                    2)算法和資料結構的差別

3)算法特性                    4)算法效率的度量

1.資料結構的基本概念

資料:程式的操作對象,用于描述客觀事物

資料元素:組成資料的基本機關

資料對象:性質相同的資料元素的集合

資料結構:資料對象中資料元素之間的關系

資料結構 實用概念和算法 31.資料結構的基本概念2.資料的邏輯結構3.資料的實體結構4.資料的運算(操作或處理)5.算法

2.資料的邏輯結構

指資料元素之間的邏輯關系,即從邏輯關系上描述資料,它與資料的存儲無關,是獨立于計算機的,邏輯結構可細分為4類:

1)集合:資料元素間除“同屬于一個集合”外,無其它關系

2)線性結構:一個對一個,如線性表、棧、隊列

3)樹形結構:一個對多個,如樹

4)圖狀結構:多個對多個,如圖

資料結構 實用概念和算法 31.資料結構的基本概念2.資料的邏輯結構3.資料的實體結構4.資料的運算(操作或處理)5.算法

3.資料的實體結構

實體結構也是存儲結構,是資料的邏輯結構在計算機存儲器内的表示(或映像),它依賴于計算機

存儲結構分為4大類:順序、鍊式、索引、散列

最常用的存儲結構:

順序存儲結構——借助元素在存儲器中的相對位置來表示資料元素間的邏輯關系

鍊式存儲結構——借助訓示元素存儲位址的指針表示資料元素間的邏輯關系

資料的邏輯結構與存儲結構密切相關:算法設計(邏輯結構)、算法實作(存儲結構)

資料結構 實用概念和算法 31.資料結構的基本概念2.資料的邏輯結構3.資料的實體結構4.資料的運算(操作或處理)5.算法

4.資料的運算(操作或處理)

在資料的邏輯結構上定義的操作,它在資料的存儲結構上實作

最常用的資料運算有5種:插入、删除、修改、查找、排序

5.算法

算法概念:特定問題的求解步驟的描述

算法和資料結構的差別:資料結構隻是靜态的描述了資料元素之間的關系,高效的程式需要在資料結構的基礎上設計和選擇算法

                                       程式=資料結構+算法

算法特性:

1)輸入:算法具有0個或多個輸入

2)輸出:算法至少有一個或多個輸出

3)有窮性:算法在有限的步驟之後會自動結束而不會無限循環

4)确定性:算法中的每一步都有确定的含義,不會出現二義性

5)可行性:算法的每一步都是可行的

算法效率的度量:

1)事後統計法:表示不同算法對同一組輸入資料的運作處理時間

優點:直覺;缺點:為了獲得不同算法的運作時間必須編寫相應程式,運作時間依賴于硬體及運作時的環境因素,算法的測試數                       據的選取相當困難

算法效率的度量:1)事前分析估算

                             2)依據統計的方法對算法效率進行估算

                             3)影響算法效率的主要因素:算法采用的政策和方法;問題的輸入規模;編譯器所産生的代碼;計算機執行                                    速度

注意1:判斷一個算法的效率時,往往隻需關注操作數量的最高次項,其它次要項和常數項可以忽略

注意2:在沒有特殊說明時,算法的時間複雜度是指最壞時間複雜度

2)大O表示法

算法效率嚴重依賴于操作數量

在判斷時首先關注操作數量的最高次項

操作數量的估算可以作為時間複雜度的估算

資料結構 實用概念和算法 31.資料結構的基本概念2.資料的邏輯結構3.資料的實體結構4.資料的運算(操作或處理)5.算法
資料結構 實用概念和算法 31.資料結構的基本概念2.資料的邏輯結構3.資料的實體結構4.資料的運算(操作或處理)5.算法

3)算法的時間複雜度

算法的最終要編譯成具體的計算機指令

每一個指令在具體的計算機CPU上運作的時間是固定的

通過具體的n的步驟的多少就可以推導出算法的複雜度

4)算法的空間複雜度

算法的空間複雜度通過計算算法的存儲空間實作

S(n)=O(f(n))

其中,n為問題規模,f(n)為在問題規模為n時所占用存儲空間的函數

大O表示法同樣适用于算法的空間複雜度

當算法執行時所需要的空間是常數時,空間複雜度為O(1)

空間與時間的政策:

       多數情況下,算法執行時所用的時間更令人關注

       如果有必要,可以通過增加空間複雜度來降低時間複雜度

       同理,也可以通過增加時間複雜度來降低空間複雜度

空間換時間的典型思想和案例:

資料結構 實用概念和算法 31.資料結構的基本概念2.資料的邏輯結構3.資料的實體結構4.資料的運算(操作或處理)5.算法
//練習:空間換時間
/*
   問題:
   在一個由自然數1-1000中某些數字所組成的數組中,每個數字可能出現零次或者多次,
   設計一個算法,找出出現次數最多的數字。
*/

#include<stdlib.h>
#include<string.h>
#include<stdio.h>

void search(int a[], int len)
{
	int sp[1000] = { 0 };
	int i = 0;
	int max = 0;

	for (i = 0; i < len; i++)          //周遊數組,求出每一個數字出現的次數,然後記錄下來
	{
		int index = a[i] - 1;
		sp[index]++;
	}

	for (i = 0; i < 1000; i++)        //掃描數組求出最大值
	{
		if (max < sp[i])
		{
			max = sp[i];
		}
	}
	for (i = 0; i < 1000; i++)        //列印數字最多的
	{
		if (max == sp[i])
		{
			printf("%d\n", i + 1);
		}
	}
}

int main()                 //把每個數字出現的中間結果,緩存下來;在緩存的結果中求最大值
{
	int array[] = {1,1,2,4,5,6,6,6,3,2};
    search(array, sizeof(array) / sizeof(*array));
	system("pause");
	return 0;
}
           

繼續閱讀