資料結構與演算法學習之演算法入門筆記

2021-10-03 20:00:07 字數 1814 閱讀 6461

關於計算:

物件:規律、技巧。

目標:高效、低耗。

computer science ------computing science演算法:特定計算模型下,旨在解決特定問題的指令序列。

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

hailstone序列目前無法證明有窮性或無窮性。

程式 不等於 演算法 死迴圈~~有窮性

好演算法:正確?健壯?可讀?效率!!!速度盡可能快,儲存空間盡可能少。(既要馬兒少吃草,又要馬兒快快跑!)

algorithm + data structures = programs

圖靈機(turing machine):

暫存器順序編號,總數沒有限制。

每一基本操作僅需常數時間。

與tm模型一樣,ram模型也是一般計算工具的簡化與抽象。

演算法執行時間 可轉化為 演算法需要執行的基本操作次數。(這樣可以不用考慮硬體環境)

大o記號 不求甚解,即眼光長遠,不拘細節

常係數可忽略,低次項可忽略。

常數複雜度 constant function o(1)甚至2013^2013 也等於 o(1)。

不含轉向(迴圈、呼叫、遞迴)的順序執行**往往是o(1),但有時含迴圈、呼叫、遞迴由於存在特殊情況,所以也可能是o(1)的。

對數o(log n)對底數無所謂,可通過換底公式證明;對常數次冪無所謂,因為完全可以提到係數上,而常數可忽略;對數本身也可以是多項式形式(ploy-log function),此時可忽略低次項。

多項式複雜度o(n^c)多項式中只關心最高項,並忽略常係數。

其中比較特殊的是:線性複雜度o(n):linear function

然後比較重要也比較常見的是介於o(n)與o(n^2)之間的複雜度,

指數複雜度o(2^n):exponential function 往往是不可忍受的。

cpu 目前大概是1s 9次方的運算。

而1天大概為 10的五次方秒;

一生用一世紀來估算,大概3* 10^4 days 即 3* 10 ^9秒;

三生三世 大概是300年 估算10 ^10秒;

所以在三生三世中的一天 相當於 一天中的一秒。

現在估計宇宙大**至今約為10 ^21秒

1000秒大概 20分鐘

歸併排序mergesort是 n* log(n)的複雜度

要抓住問題的主要方面!

資料結構與演算法學習

我想重新學習一下資料結構與演算法,打好基礎。to measure is to know.我們用演算法複雜度t n 來表示演算法的效率,效能。t n 的取值 所有問題規模為n的問題例項中,將他們的計算成本進行總體的比較,取出最壞情況下的值。有幾點需要catch,1.演算法執行的時間,會根據程式語言,作...

資料結構與演算法學習筆記

演算法基礎篇 第一章 演算法概述 首先了解一下基本的概念 1.1 什麼是演算法呢?從字面意義上理解,演算法就是用於計算的方法,用這種方法達到預期的結果。通俗的講,演算法可以理解為乙個完整的解題步驟,由一些基本的運算和規定的運算順序組成。通過這樣的解題步驟可以解決特定的問題。演算法可以抽象出5個特徵 ...

資料結構與演算法學習二

1 用js中object物件模擬集合set的資料結構 set集合中的資料結構 s s 即集合中的鍵 值相同。故,可令object物件中的鍵 值相同,來模擬set集合及其中的方法,如下 用js中object模擬實現集合set資料結構 es6中有set類,避免混淆這裡用set2 var set2 fun...