本論文探討了長短時記憶網路(LSTM)和反向傳播神經網路(BP)在股票價格預測中的應用。首先,我們介紹了LSTM和BP在時間序列預測中的基本原理和應用背景。通過對比分析兩者的優缺點,我們選擇了LSTM作為基礎模型,因其能夠有效處理時間序列數據中的長期依賴關係,在基礎LSTM模型的基礎上,我們引入了動... ...
目錄
1.1 數據結構的研究內容
1.2 基本概念和術語
1.2.1 數據、··元素、··項和··對象
數據:
是客觀事物的符號表示,是所有能輸入到電腦中並被電腦程式處理的符號的總稱。
數據元素:
是數據的基本單位,也稱元素/記錄,用於完整地描述一個對象。如學生表中的一名學生。
數據項:
是組成數據元素的、有獨立含義的、不可分割的最小單位。如學生基本信息表中的學號、姓名、性別等。
數據對象:
是性質相同的數據元素的集合,是數據的一個子集。如整數數據對象、字母字元數據對象、由多個數據項組成的複合數據元素。
1.2.2 數據結構
數據結構是帶“結構”的數據元素的集合,“結構”就是指數據元素之間存在的關係,包括邏輯結構和存儲結構。
一、邏輯結構
從邏輯關係上描述數據,與數據的存儲無關,獨立於電腦,數據元素和關係兩要素
- 集合結構
數據元素之間只有“屬於同一集合”的關係。
如確定一名學生是否為班級成員,只需將班級看作一個集合結構。
- 線性結構
數據元素之間存在一對一的關係。
如將學生信息數據按照其入學報道的時間先後順序進行排列。
- 樹結構
數據元素之間存在一對多的關係。
如在班級的管理體系中,班長管理多個組長,每位組長管理多名組員。
- 圖結構或網狀結構
數據元素之間存在多對多的關係。
如多位同學之間的朋友關係,任何兩位同學都可以是朋友。
總結
二、存儲結構
數據對象在電腦中的存儲表示,也稱物理結構。把數據對象存儲到電腦時,通常既要存儲各數據元素的數據,又要存儲數據元素之間的邏輯關係。
- 順序存儲結構
藉助元素在存儲器中的相對位置來表示數據元素之間的邏輯關係,要求所有的元素依次存放在一片連續的存儲空間中,數據從低地址向高地址方向儲存,通常藉助數組類型來描述。
- 鏈式存儲結構
無需占用一整塊存儲空間,但為了表示數據元素(結點)之間的關係,需要給每個結點附加指針欄位,用於存放後繼元素的存儲地址,通常藉助指針類型來描述。每個結點占用兩個連續的存儲單元。
1.2.3 數據類型和抽象數據類型
- 數據類型
在程式設計語言中,每一個數據都屬於某種數據類型。類型規定了數據的取值範圍、存儲方式以及允許進行的運算,數據類型是一個值的集合和定義在這個值集上的一組操作的總稱。
如C語言中的整型變數,其值集為某個區間上的整數,定義在其上的操作為加減乘除和取模等算術運算。
- 抽象數據類型
就是指由用戶定義的、表示應用問題的數學模型,以及定義在這個模型上的一組操作的總稱,具體包括...三部分(如下)
定義格式:
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)數據結構包括兩個方面的內容:數據的邏輯結構和存儲結構。同一邏輯結構採用不同的存儲方法,可以得到不同的存儲結構。
- 邏輯結構是從具體問題抽象出來的數學模型,從邏輯關係上描述數據,它與數據的存儲無關。根據數據元素之間關係的不同特性,通常有四類基本邏輯結構:集合、線性、樹形、圖狀結構。
- 存儲結構是邏輯結構在電腦中的存儲表示,分為順序和鏈式兩類。
3)抽象數據類型是指由用戶定義的、表示應用問題的數學模型,以及定義在這個模型上的一組操作的總稱,包括數據對象、數據關係、基本操作三部分。
4)演算法是為瞭解決某類問題而規定的一個有限長的操作序列。演算法有五個特性:有窮性、確定性、可行性、輸入和輸出。一個演算法的優劣應從正確性、可讀性、健壯性和高效性四個方面來評價。
5)演算法分析的兩個主要方面是分析演算法的時間複雜度和空間複雜度,以考察演算法的時間和空間效率。一般情況下,將演算法的時間複雜度作為分析的重點。演算法執行時間的數量級稱為演算法的漸近時間複雜度,T(n)=O(f(n))
,它表示隨著問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,簡稱時間複雜度。
本文來自博客園,作者:Vicky-han,轉載請註明原文鏈接:https://www.cnblogs.com/vicky-han/p/18008443