資料結構的本質到底是基於純邏輯還是具體計算機硬體實現?

時間 2021-06-09 01:45:50

1樓:Comcx

有趣而又無聊的問題。資料結構這東西可不是計算機專利,隔壁數學早就玩出花了只不過人家不管這玩意叫'資料結構'。如果你非要糾結'本質'這個詞,那我來乙個暴論:資料結構是演算法的抽象。

2樓:

是一整套存在。

首先畫兩個點,乙個叫做現實世界的東西。另乙個點,叫做計算機世界的內部實現。

現在,你需要畫一條不管什麼樣的曲線直線,把這兩個點連起來。

從提取資料、歸納模型,到上機編碼(程式設計)具體實現,中間的過程可能會很簡單,也可能極端複雜。

課本裡學到的那麼幾種資料結構只不過是維繫複雜的現實世界裡的無數種資料模型的簡化。你可以創造自己的資料結構,可能是這幾種結構的複合體,也可以是全新的。

但不管哪種,只要你做了,完整的一整套體系裡,就會有許多不可能分得那麼分明的概念。

人類語言天生有歧義性。」資料結構「這四個字輕輕巧巧,卻不可能涵蓋所有。

它包含的東西,在不同的場景裡,有的時候多,有的時候少。

書本上的,恰恰是最少的。也恰恰是最多的。

說它少,是因為它隱藏了許多上下文語境:例如,這些是基於目前的(相對)原始的計算機體系的硬體特徵的,是不具體針對某種程式語言的(ADT,抽象資料型別),具體語言是有不同實現方法的,許多不需要程式設計師來做的,程式設計師也是分不同層次的(以其操作的物件的抽象層次距離硬體核心的距離劃分,不是鄙視鏈的劃分),……

說它多,是因為它基本上已經告訴了我們如果將來的有一天面對新的硬體特徵,該怎樣創造相適合的資料模型。

3樓:程式設計師職場大萌哥

從需求來的,這個是純邏輯的,與硬體無關。

這個類似於基礎資料型別一樣。

我們需要表徵世界,然後出來了比如十個原子型別,然後依據計算機的硬體結構,進行實驗。

你要說完全依賴邏輯,也不對。因為數碼訊號的出現,就是因為硬體原因,模擬訊號需要表示,只能依賴精度取樣,變成數字,有限位數。

4樓:

大多資料結構都是單純的數學抽象,可以脫離計算機硬體而存在。

比如圖論作為離散數學裡的乙個重要分支,在計算機發明以前就存在。最小生成樹,拓撲排序等,在很多領域中都有應用。只是在現在這個時代,這些應用大多是以電腦程式來實現的。

又比如雜湊表,或者字典結構。現實世界中最常見的例子就是字典。你需要通過某種演算法(拼音、筆畫、字母等)來找到你需要查閱的內容,而不是一頁一頁翻過去查詢。

如果是第一種,?

事實上目前的計算機硬體儲存和處理資料最底層的結構基本上是線性的,比如記憶體位址。然而為了用計算機去解決現實世界的問題,比如圖論的問題,我們不得不把非線性的資料結構轉化為線性的結構來儲存,比如圖的鄰接矩陣、鄰接表等儲存形式。

5樓:qwety ed

純邏輯和計算機硬體能對立起來麼?

這就跟雞和蛋能對立起來麼是乙個道理。

一般來說,問出這樣問題就代表中間一定有乙個大家都依賴的概念還沒出現/穩定。反過來講,如果一門學科已經問不出這種問題了,那就到了盡頭了。

同理,相關的還有所謂數學是發現還是發明?—「某些規律被總結,然後提煉抽象,然後又被用來解決新的問題」—這個過程就是從發現到發明。

資料結構也是一回事,大了說,所有科學都遵循這個規律。

「純邏輯」的發展改善了「計算機硬體實現」,這種改善提高了計算機效能和表現,又反過來促進了「純邏輯」的發展。

是不是有馬哲那味兒了!

6樓:

資料結構的本質是乙個對映,或者運算元,或者函式。

資料之間的關係構成了它們之間的結構。有兩種結構,乙個是邏輯結構,乙個是(物理)儲存結構。

資料,是對現實世界的客體的某種屬性的直接或者間接的數量化。

直接的數量化的例項,比如客體的位置。

間接的數量化的例項,比如漢諾塔的操作步驟,再比如字典,等等。

漢諾塔這個例子很好,因為它提示我們,操作步驟也是可以進行某種間接的數量化。

這一點,我們要反覆體會,並且多看一些其它的間接數量化的例子。

7樓:靈劍

都是,你需要搞清楚科學的乙個基本邏輯:

現實 -> 觀察 -> 模型 -> 數學 -> 結論 -> 檢驗 -> 指導實踐

電腦科學也是大同小異,模型和數學是不分家的,沒有數學則研究效率會嚴重受影響,但只有數學卻脫離對現實的建模,那結論是無法進行實際檢驗,也無法最終成為生產力的。

8樓:觸中之觸

同乙個資料結構在處理不同問題的時候基於不同

比如處理高併發時使用佇列,基於硬體cpu

處理bfs(寬度優先)時使用佇列,基於演算法邏輯

9樓:淺倉南家的達也醬

這個問題你需要從發展和使用兩個角度來看。

如果僅從使用上來說,這些資料結構都是完全脫離於硬體的,都是一些純理論的內容,只要有足夠的設計空間和設計時間,都可以實現這些理論的內容,當然具體的實現方式也是五花八門。

但是實際的發展過程是乙個不斷試錯和調整的過程,從一開始最簡單的邏輯門單元開始,運算結構的複雜度和規模都在逐漸提公升,為了適應這些改變,理論也會逐漸發展;

而很多時候抽象理論又會走在前面,但是硬體並不支援,或者並不在更底層的結構上支援,這時候硬體又會來迎合一些理論。

但是總而言之,目的都是為了提高計算能力,提高計算效率。

有哪些分塊好題,最好是純資料結構做不了的?

RhmBWT 你可以看看YNOI2018 裡面好多分塊題的 Problem 5143.Ynoi2018 五彩斑斕的世界Problem 5144.Ynoi2018 末日時在做什麼?有沒有空?可以來拯救嗎?Problem 5145.Ynoi2018 未來日記 感覺比無腦分塊好一些的 退役多年的老鹹魚厚顏...

資料結構 和 資料型別 兩個概念的本質是什麼,區別與聯絡是什麼?

jqyjqy 資料型別是程式語言的概念,是解釋記憶體中的資料的方式,為了講課方便被拿到資料結構這門課裡用了。可以不使用資料型別這個概念,可以不用高階程式語言,可以直接用01位元來講課。總是要想辦法有組織地把01位元儲存在記憶體中。資料結構是在記憶體中 硬碟也需要 組織 儲存資料的方式,在記憶體中的表...

哪本書是在實際案例中介紹資料結構與演算法的 不要馬克阿倫維斯或嚴蔚敏主編的那樣的教材!

xiaodan zhuang 資料庫系統實現 從儲存開始,索引方面就有 B 樹,雜湊表,R 樹,KD 樹,四叉樹,位圖,壓縮演算法等等。查詢方面,設計 sql parser 基本編譯原理都會用到的語法樹,DAG,NFA DFA 等等,特別是各種圖 CFG PDG 之類,暫存器優化染色原理,鍊錶 排序...