數(shù)據(jù)結(jié)構(gòu)和算法緒論 學(xué)習(xí)筆記(一)

程序設(shè)計(jì) = 數(shù)據(jù)結(jié)構(gòu) + 算法

  • 1、什么是數(shù)據(jù)結(jié)構(gòu)?
  • 2、算法初認(rèn)識(shí)
  • 3、算法初體驗(yàn)

一、什么是數(shù)據(jù)結(jié)構(gòu)?

數(shù)據(jù)結(jié)構(gòu)是一門(mén)研究非數(shù)值計(jì)算的程序設(shè)計(jì)問(wèn)題中的操作對(duì)象, 以及它們之間的關(guān)系和操作等祥光問(wèn)題的學(xué)科。

再簡(jiǎn)單的來(lái)說(shuō)數(shù)據(jù)結(jié)構(gòu)就是關(guān)系,就是數(shù)據(jù)元素相互之間存在的一種或多種特定關(guān)系的集合。

此時(shí)需要理清幾個(gè)結(jié)構(gòu): 邏輯結(jié)構(gòu) 和 物理結(jié)構(gòu)。

  • 邏輯結(jié)構(gòu): 是指數(shù)據(jù)對(duì)象中數(shù)據(jù)元素之間的相互關(guān)系。
  • 物理結(jié)構(gòu): 是指數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)中的存儲(chǔ)形式。
1-1、邏輯結(jié)構(gòu):
  • 集合結(jié)構(gòu): 集合結(jié)構(gòu)中的數(shù)據(jù)元素除了同屬于一個(gè)集合外,它們之間毫無(wú)關(guān)系。


    集合結(jié)構(gòu)
  • 線性結(jié)構(gòu):一對(duì)一的關(guān)系


    線性結(jié)構(gòu)
  • 樹(shù)形結(jié)構(gòu):一對(duì)多(3P、4P),層次關(guān)系,樹(shù)形結(jié)構(gòu)


    樹(shù)形結(jié)構(gòu)
  • 圖形結(jié)構(gòu):多對(duì)多的關(guān)系(雜交)


    圖形結(jié)構(gòu)
1-2、物理結(jié)構(gòu)

物理結(jié)構(gòu):我們實(shí)際上研究的就是如何把數(shù)據(jù)元素存儲(chǔ)到計(jì)算機(jī)的存儲(chǔ)器中。
存儲(chǔ)器主要針對(duì)內(nèi)存而言的,像硬盤(pán)、軟盤(pán)、光盤(pán)等外部存儲(chǔ)器的數(shù)據(jù)組織通常用文件結(jié)構(gòu)來(lái)描述。

而數(shù)據(jù)元素的存儲(chǔ)結(jié)構(gòu)形式有兩種:順序存儲(chǔ)鏈?zhǔn)酱鎯?chǔ)

  • 1-2-1、 順序存儲(chǔ):把數(shù)據(jù)中元素存放的地址連續(xù)存儲(chǔ)的存儲(chǔ)單元里,其數(shù)據(jù)間的邏輯關(guān)系和屋里關(guān)系是一致的。
    面對(duì)時(shí)常要變化的順序,所以鏈?zhǔn)酱鎯?chǔ)就應(yīng)運(yùn)而生啦,非常靈活。
  • 1-2-2、鏈?zhǔn)酱鎯?chǔ): 把數(shù)據(jù)元素存放在任意的存儲(chǔ)單元里,這組存儲(chǔ)單元可以是連續(xù)的,也可以是不連續(xù)的。
    鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的數(shù)據(jù)元素存儲(chǔ)關(guān)系并不能反應(yīng)其邏輯關(guān)系,因此需要用一個(gè)指針存放數(shù)據(jù)元素的地址,這樣子通過(guò)地址就可以找到相關(guān)聯(lián)數(shù)據(jù)元素的位置。

以上大致了解了數(shù)據(jù)結(jié)構(gòu)的幾種結(jié)構(gòu):邏輯結(jié)構(gòu) & 物理結(jié)構(gòu),然后再看看邏輯結(jié)構(gòu)中的幾種關(guān)系(圖形 & 集合& 線性& 樹(shù)形),以及物理結(jié)構(gòu)中的順序存儲(chǔ)&鏈?zhǔn)酱鎯?chǔ)。

二、算法初認(rèn)識(shí)

2-1、官方解釋

算法是解決特定問(wèn)題求解步驟的描述,在計(jì)算機(jī)中表現(xiàn)為指令的有限序列,并且每條指令表示一個(gè)或多個(gè)操作。

2-2、算法的特性

輸入、輸出、有窮性、確定性、可行性。

  • 輸入: 算法具有領(lǐng)個(gè)或多個(gè)輸入。
  • 輸出:算法至少有一個(gè)多個(gè)輸出。(必須要有返回)
  • 有窮性: 指算法在執(zhí)行有限的步驟之后,自動(dòng)結(jié)束而不會(huì)出現(xiàn)無(wú)限循環(huán),并且每一個(gè)步驟在可接受的時(shí)間內(nèi)完成。一個(gè)永遠(yuǎn)都不會(huì)結(jié)束的算法,我們還要他來(lái)干嘛呢?
  • 確定性:算法的每一個(gè)步驟都具有確定的含義,不會(huì)出現(xiàn)二義性。
    算法在一定條件下,只有一條執(zhí)行路徑,相同的輸入只有唯一的輸出結(jié)果。
    算法的每個(gè)步驟都應(yīng)該被精確定義而無(wú)歧義。
  • 確定性:算法的每一步都必須是可行的,也就是說(shuō),每一步都能夠通過(guò)執(zhí)行有限次數(shù)完成。
2-3、算法設(shè)計(jì)的要求

算法是變換無(wú)窮的,它是不唯一的,也就是說(shuō),同一個(gè)問(wèn)題,他可以有很多中答案的。但也有其基本要求: 正確性、可讀性、健壯性、時(shí)間效率高存儲(chǔ)量低。

  • 正確性: 指算法至少應(yīng)該具有輸入、輸出和加工處理無(wú)歧義性,能正確反映問(wèn)題的需求,能夠得到問(wèn)題的正確答案。
  • 可讀性:便于他人閱讀,理解和交流。(就是好修改啊,畢竟集體的力量還是最大的)
  • 健壯性:輸入不合法的時(shí)候,也能做出處理,而不會(huì)莫名崩潰。
  • 時(shí)間效率高存儲(chǔ)量低:時(shí)間少,內(nèi)存用的也少。

看看正確性的四個(gè)層次:

正確性的四個(gè)層次

以上筆記全部來(lái)自:小甲魚(yú)數(shù)據(jù)結(jié)構(gòu)與算法1小甲魚(yú)數(shù)據(jù)結(jié)構(gòu)與算法2 。(需翻墻)

三、算法初體驗(yàn)

前提:一個(gè)數(shù)組中包含多個(gè)對(duì)象,其中對(duì)象中存在類(lèi)似父親和兒子的關(guān)系,其中兒子肯定會(huì)有其爸爸存在的, 例如用idfatherId代替 ID,如果 fatherId為空就是父親,否則就是兒子
要求: 兒子永遠(yuǎn)要跟隨父親的后面
例如:

@[
    @{
          @"id": @"1001",
          @"fatherId" : @""
    },
    @{
          @"id": @"1003",
          @"fatherId" : @""
    },
    @{
          @"id": @"1004",
          @"fatherId" : @""
    },
    @{
          @"id": @"1032",
          @"fatherId" : @""
    },
    @{
          @"id": @"1007",
          @"fatherId" : @"1004"
    },
    @{
          @"id": @"1008",
          @"fatherId" : @"1001"
    }
]

轉(zhuǎn)化為:

@[
    @{
          @"id": @"1001",
          @"fatherId" : @""
    },
    @{
          @"id": @"1008",
          @"fatherId" : @"1001"
    },
   @{
          @"id": @"1003",
          @"fatherId" : @""
    },
    @{
          @"id": @"1004",
          @"fatherId" : @""
    },
   @{
          @"id": @"1007",
          @"fatherId" : @"1004"
    },
   @{
          @"id": @"1032",
          @"fatherId" : @""
    }
]

此處初次體驗(yàn)下,目前我用了比較笨的方法......
如有好的方法,歡迎告知。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容