數據結構——第1章 緒論

来源:https://www.cnblogs.com/vicky-han/p/18008443
-Advertisement-
Play Games

本論文探討了長短時記憶網路(LSTM)和反向傳播神經網路(BP)在股票價格預測中的應用。首先,我們介紹了LSTM和BP在時間序列預測中的基本原理和應用背景。通過對比分析兩者的優缺點,我們選擇了LSTM作為基礎模型,因其能夠有效處理時間序列數據中的長期依賴關係,在基礎LSTM模型的基礎上,我們引入了動... ...


目錄

1.1 數據結構的研究內容

1.2 基本概念和術語

1.2.1 數據、··元素、··項和··對象

數據:是客觀事物的符號表示,是所有能輸入到電腦中並被電腦程式處理的符號的總稱。

數據元素:是數據的基本單位,也稱元素/記錄,用於完整地描述一個對象。如學生表中的一名學生。

數據項:是組成數據元素的、有獨立含義的、不可分割的最小單位。如學生基本信息表中的學號、姓名、性別等。

數據對象:是性質相同的數據元素的集合,是數據的一個子集。如整數數據對象、字母字元數據對象、由多個數據項組成的複合數據元素。

1.2.2 數據結構

數據結構是帶“結構”的數據元素的集合,“結構”就是指數據元素之間存在的關係,包括邏輯結構和存儲結構。

一、邏輯結構

從邏輯關係上描述數據,與數據的存儲無關,獨立於電腦,數據元素和關係兩要素

  1. 集合結構

數據元素之間只有“屬於同一集合”的關係。
如確定一名學生是否為班級成員,只需將班級看作一個集合結構。

  1. 線性結構

數據元素之間存在一對一的關係。
如將學生信息數據按照其入學報道的時間先後順序進行排列。

  1. 樹結構

數據元素之間存在一對多的關係。
如在班級的管理體系中,班長管理多個組長,每位組長管理多名組員。

  1. 圖結構或網狀結構

數據元素之間存在多對多的關係。
如多位同學之間的朋友關係,任何兩位同學都可以是朋友。

總結
image

二、存儲結構

數據對象在電腦中的存儲表示,也稱物理結構。把數據對象存儲到電腦時,通常既要存儲各數據元素的數據,又要存儲數據元素之間的邏輯關係。

  1. 順序存儲結構

藉助元素在存儲器中的相對位置來表示數據元素之間的邏輯關係,要求所有的元素依次存放在一片連續的存儲空間中,數據從低地址向高地址方向儲存,通常藉助數組類型來描述。

  1. 鏈式存儲結構

無需占用一整塊存儲空間,但為了表示數據元素(結點)之間的關係,需要給每個結點附加指針欄位,用於存放後繼元素的存儲地址,通常藉助指針類型來描述。每個結點占用兩個連續的存儲單元。

1.2.3 數據類型和抽象數據類型

  1. 數據類型

在程式設計語言中,每一個數據都屬於某種數據類型。類型規定了數據的取值範圍、存儲方式以及允許進行的運算,數據類型是一個值的集合和定義在這個值集上的一組操作的總稱。

如C語言中的整型變數,其值集為某個區間上的整數,定義在其上的操作為加減乘除和取模等算術運算。

  1. 抽象數據類型

就是指由用戶定義的、表示應用問題的數學模型,以及定義在這個模型上的一組操作的總稱,具體包括...三部分(如下)

定義格式:

ADT 抽象數據類型名
{
    數據對象:<定義>
    數據關係:<定義>//採用數學符號和自然語言描述
    基本操作:<定義>
}ADT 抽象數據類型名

基本操作的定義格式:

基本操作名(參數表)
//賦值參數只為操作提供輸入值,以“&”開頭,除此之外還將返回操作結果
	初始條件:<描述>//操作執行之前數據結構和參數應滿足的條件,為空則省略
	操作結果:<描述>//操作完成後,數據結構的變化狀況和應返回的結果

1.3 抽象數據類型的表示與實現

運用抽象數據類型描述數據結構,有助於在設計一個軟體系統時,不必首先考慮其中包含的數據對象,以及操作在不同處理器中的表示和實現細節,而是在構成軟體系統的每個相對獨立的模塊上定義一組數據和相應的操作,把這些數據的表示和操作細節留在模塊內部解決,在更高的層次上進行軟體的分析和設計,從而提高軟體的整體性能和利用率。

在C++中,用類的聲明表示抽象數據類型,用類的實現來實現抽象數據類型。因此,C++中實現的類相當於數據的存儲結構以及在存儲結構上實現的對數據的操作。

(有在儘量縮減篇幅了其實,覺得這些很有助於理解就保留了)

以複數為例,

//定義部分
ADT Complex
{
    數據對象:D={e1,e2|e1,e2∈R,R是AXT實數集}
    數據關係:S={<e1,e2>|e1是複數的實部,e2是複數的虛部}
    基本操作:
        Create(&C,x,y)
          操作結果:構造複數C,其實部和虛部分別被賦以參數x和y的值。
        Add(C1,C2)
          初始條件:C1,C2是複數。
          操作結果:返回兩個複數C1和C2的和。
}ADT Complex

//表示部分
typedef struct      //複數類型
{
    float Realpart; //實部
    float Imagepart;//虛部
}Complex;

//實現部分
void Create(&Complex C,float x,float y)
{
    //構造一個複數
    C.Realpart=x;
    C.Imagepart=y;
}

Complex Add(Complex C1,Complex C2)
{
    //求兩個複數C1和C2的和
    Complex sum;
    sum.Realpart=C1.Realpart+C2.Realpart;
    sum.Imagepart=C1.Imagepart+C2.Imagepart;
    return sum;
}

1.4 演算法和演算法分析

1.4.1 演算法的定義與特性

演算法是為瞭解決某類問題而規定的一個有限長的操作序列。
有窮性、確定性、可行性、輸入和輸出。

1.4.2 演算法的時間複雜度

描述的是演算法執行時間開銷和問題規模n之間的關係。包含最好、平均和最壞時間複雜度。時間複雜度通常包括:常量階、線性階、平方階、對數階等。

求下麵語句的執行次數:

for(i=1;i<=n;i++)//n+1
for(i=1;i<=n;i++)
  求這一句x++;//n
for(i=1;i<=n;i++)
  這一句for(j=1;j<=n;j++)//n(n+1)
for(i=1;i<=n;i++)
  for(j=1;j<=n;j++)
    這一句x++;//n²
for(i=1;i<=n;i++)
  for(j=1;j<=n;j++)
    for(k=1;k<=n;k++)
      這一句x++;

結果是這個\(\sum_1^n\) * \(\sum_1^i\) * j

for(i=1;i<=n;i=i*2)
{
  x++;
  s=0;
}

結果是這個\(log_2n\)

相應的,整個程式的時間複雜度就取決於最大階,如:

for(i=1;i<=n;i++)//n+1
  for(j=1;j<=n;j++)//n(n+1)

n+1+n(n+1)=n+1+n²+n ---- O(n²)

1.4.3 演算法的空間複雜度

程式執行時,除了需要寄存本身所有指令、常數、變數和輸入的數據外(取決於問題本身),還需要一些對數據進行操作的輔助存儲空間。空間複雜度考慮的就是在演算法實現中考慮的輔助空間大小。

1.5 小結

1)數據結構是一門研究非數值計算程式設計中操作對象,以及這些對象之間的關係和操作的學科。

2)數據結構包括兩個方面的內容:數據的邏輯結構和存儲結構。同一邏輯結構採用不同的存儲方法,可以得到不同的存儲結構。

  1. 邏輯結構是從具體問題抽象出來的數學模型,從邏輯關係上描述數據,它與數據的存儲無關。根據數據元素之間關係的不同特性,通常有四類基本邏輯結構:集合、線性、樹形、圖狀結構。
  2. 存儲結構是邏輯結構在電腦中的存儲表示,分為順序和鏈式兩類。

3)抽象數據類型是指由用戶定義的、表示應用問題的數學模型,以及定義在這個模型上的一組操作的總稱,包括數據對象、數據關係、基本操作三部分。

4)演算法是為瞭解決某類問題而規定的一個有限長的操作序列。演算法有五個特性:有窮性、確定性、可行性、輸入和輸出。一個演算法的優劣應從正確性、可讀性、健壯性和高效性四個方面來評價。

5)演算法分析的兩個主要方面是分析演算法的時間複雜度和空間複雜度,以考察演算法的時間和空間效率。一般情況下,將演算法的時間複雜度作為分析的重點。演算法執行時間的數量級稱為演算法的漸近時間複雜度,T(n)=O(f(n)),它表示隨著問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,簡稱時間複雜度。

本文來自博客園,作者:Vicky-han,轉載請註明原文鏈接:https://www.cnblogs.com/vicky-han/p/18008443


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 迴首 在 零基礎入門Vue之夢開始的地方——插值語法 我記錄了v-bind、v-on、v-model的學習 在 零基礎入門Vue之To be or not to be——條件渲染 我記錄了v-if、v-else-if、v-else、v-show的學習 在 零基礎入門Vue之影分身之術——列表渲染&渲 ...
  • Rich庫的功能就像它的名字一樣,使Python編程更加豐富(rich),它幫助開發者在控制台(命令行)輸出中創建豐富、多彩和具有格式化的文本。 本篇總結瞭如何使用Rich庫讓我們的命令行工具更加美觀。 1. 安裝 通過pip安裝: pip install rich 使用下麵的命令驗證是否安裝成功。 ...
  • G 題面 定義\({{dp_i}_j}_k\)為考慮完第i個點,最左邊沒有染色的點為\(j\),最右邊沒有染色的點為\(k\)的最小數量。 考慮轉移(用自己更新別人) 如果不用\(i\),直接轉移到\({{dp_{i+1}}_j}_k\)。 如果向左噴,\(k\)為\(max({i+1,k})\), ...
  • 關註我,緊跟本系列專欄文章,咱們下篇再續! 作者簡介:魔都技術專家兼架構,多家大廠後端一線研發經驗,各大技術社區頭部專家博主,編程嚴選網創始人。具有豐富的引領團隊經驗,深厚業務架構和解決方案的積累。負責: 中央/分銷預訂系統性能優化 活動&優惠券等營銷中台建設 交易平臺及數據中台等架構和開發設計 目 ...
  • 概述 所謂介面冪等性就是:在特定場景下,同一條件的多次介面調用,保證操作只執行一次,如果介面沒有保證冪等性,在以下場景就會產生問題 前端重覆提交:用戶進行註冊、創建個人信息等操作,由於網路抖動導致頁面沒有及時響應,用戶認為沒有成功而多次點擊提交按鈕,發生重覆提交表單請求 介面超時重試:提供外部系統調 ...
  • 分享是最有效的學習方式。 博客:https://blog.ktdaddy.com/ 老貓的設計模式專欄已經偷偷發車了。不甘願做crud boy?看了好幾遍的設計模式還記不住?那就不要刻意記了,跟上老貓的步伐,在一個個有趣的職場故事中領悟設計模式的精髓吧。還等什麼?趕緊上車吧 故事 這段時間以來,小貓 ...
  • 說明 PHP語言本身可以用insteadof和as關鍵字解決多個trait同名成員方法衝突的問題,但是貌似沒有直接解決同名成員屬性衝突的方案。 雖然屬性名衝突極少發生,但是不代表不會發生。 如果是自定義trait 可以複製舊trait文件到新trait,改新文件的成員屬性名,引用新trait。 直接 ...
  • Java Break 和 Continue Java Break: break 語句用於跳出迴圈或 switch 語句。 在迴圈中使用 break 語句可以立即終止迴圈,並繼續執行迴圈後面的代碼。 在 switch 語句中使用 break 語句可以跳出當前 case,並繼續執行下一個 case。 示 ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...