Rumah masalah biasa 数据结构怎么自学

数据结构怎么自学

Aug 22, 2020 am 10:21 AM
struktur data

数据结构自学的方法:首先第一阶段认识数据结构,了解基本组成及性能;然后第二阶段深入数据结构,掌握相关特性,会写代码;最后第三阶段检索数据结构,将所学知识点运用到实际问题中。

数据结构怎么自学

数据结构自学的方法:

第一阶段:认识数据结构

第一步:学习它就应该知道数组、链表、栈、队列、散列表、跳表、图、树、堆、字典树10种数据结构用来干什么,为什么,怎么做,小鹿建议去看一些基础的数据结构书籍或者借助百度和谷歌简单了解一下每种数据结构用来干什么,为什么,怎么做就可以了,然后可以简单做一下笔记和博客。

第二步:每种数据结构都有它的优缺点和性能的好坏,那我们以什么标准来衡量数据结构与算法的性能好快呢?那第二步就学习时间复杂度、空间复杂度相关的复杂度分析的内容,这部分内容至关重要,因为后边要学到的数据结构与算法都要有一个衡量性能标准的,为了能够不同的问题解决选择出性能最优的数据结构和算法。

第二阶段:深入数据结构

第一步:写代码。上边最基本的十种数据结构相关特性和使用条件都做笔记了,然后我们从头开始对每种数据结构进入深入研究,首先数据结构涉及到的操作,比如增、删、改、查等操作要自己实现一遍,在机器上运行一遍,写代码的时候一定要注意以下几点:边界条件、指针、代码的规范。

这样会使你更加的对代码有颗敬畏之心,每次写代码都要认真对待,如果机器上写代码没问题了,可以自己通过在笔记本上用笔手写亲自实现一遍,有利于你加深你的代码逻辑的理解。

第二步:在第一阶段中我们了解到性能的衡量标准,那下一步就再回过头来对10种最常用的几种数据结构涉及到的操作进行性能分析。你可能会问,为什么不边写代码边进行性能分析呢?我觉得分阶段的好处就是能集中解决问题,写代码就是要锻炼写代码的思维逻辑能力,性能分析就是要提高自己的分析能力,性能分析完成之后再看一下之前写的代码有哪些可以进行优化改进的。这期间你会遇到各种问题,遇到问题怎么做,我通常会去百度或者谷歌借助别人写的文章进行总结记录到笔记本上。

第三步:每种数据结构的性能分析完成之后,再进行对每种数据进行深入。第一阶段我推荐的是看一些基础的书籍,涉及到的知识层次不深。但是我们还是要至少手中有一本具有权威性深入解析的数据结构书籍才能对一些概念进行深入的理解。基础书籍毕竟是让你入门的嘛,我们可以通过这些权威性高、内容全面的对已学到的数据结构知识点进行查缺补漏。

第四步:单独的深入学习真的很枯燥杂么办,那么我们就实际生活中的例子去分析,比如猜数字游戏、0/1背包问题、走迷宫、八皇后问题以及满减凑单问题等。如猜数字游戏,我们可以想想怎么才能在最短的时间内猜到正确的数字呢,可能你会想到使用二分查找。那好了,我们问一下自己二分查找存在的问题,这个过程中一定要多问自己为什么,只有这样你的知识层次才会得到扩展,比如二分查找如果数据中有重复数据怎么解决?

我还是要强调一下,一定要多问自己为什么,因为从心理学上来讲,人的大脑符合最小阻力原则,就是思考的事情最不喜欢做,所以这里我们要逆着来,才能进一步进行突破。如果你觉的上述两个阶段没有问题了,我们就进行下面的第三个阶段检索数据结构。

第三阶段:检索数据结构

第一步: 这时你可能学的非常多的关于数据结构的内容,但是很难运用,那怎么能够在实际实际问题中运用起来呢?我们前边已经将零碎的知识点整理到笔记本上了?接下来该怎么做呢?我们可以借助思维导图,对知识体系化整理,无论是复习巩固都利于我们进一步加强。

第二步:上述整理成体系之后完毕之后,然后去谷歌或者百度搜索一下有明确解决方案的实际问题拿来进行分析学习,你到这些实际项目中会发现,很多问题涉及到多个数据结构问题,我们前边解决的还不过是针对单一的数据结构,那就尝试着自己将数据结构之间建立联系,比如数组和链表,每种数据结构都有优缺点,你在学习的过程中你会发现一个数据结构的优点正是另一数据结构的缺点,数组在内存空间是连续的,对CPU缓存友好,而链表在内存中是零碎内存空间,对CPU缓存不友好,但是链表可以动态扩容而数组不可以。

再比如为了提高程序的效率不得不用消耗更多的内存空间的数据结构去代替另一数据结构,如果内存紧张,对执行效率要求不高的话,我们又用省内存执行效率稍有不高的数据结构去代替占内存大而执行快的数据结构。

第三步:学会将实际问题转换成所学的数据结构。怎么转化呢?如:假如你是一名工程师,要对链表实现缓存的算法进行优化你会怎么解决?我们先将问题转换成学过的数据结构,里边提到链表,好那我们知道有链表了,在分析用链表实现了那些操作?淘汰数据、查找数据、缓存数据,这三个操作里边都涉及到查找,我们不得不遍历整个链表,时间复杂度为O(n)。

那我们就想能不能对查找进行优化呢?根据问题或者数据的特征找适用的数据结构,缓存的三个操作涉及到快速的插入、删除、查询数据,我们在大脑中快速的检索可以快速的实现插入、删除、查询的数据结构有哪些?平衡二叉树、散列表、跳表等,比如我们选择散列表,最后分析一下时间复杂度是不是优化了很多,否则我们再换另一种数据结构进行性能分析。

我们不难发现,实际问题就会一步一步的分解成了我们学习到的数据结构的基本操作分析,然后利用我们学到的数据结构的优缺点和性能分析得出最优解绝方法,但是在企业中遇到实际问题中往往比我们拿一些做练习的实际问题复杂的要多。

相关推荐:编程视频课程

Atas ialah kandungan terperinci 数据结构怎么自学. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bandingkan struktur data kompleks menggunakan perbandingan fungsi Java Bandingkan struktur data kompleks menggunakan perbandingan fungsi Java Apr 19, 2024 pm 10:24 PM

Apabila menggunakan struktur data kompleks dalam Java, Comparator digunakan untuk menyediakan mekanisme perbandingan yang fleksibel. Langkah-langkah khusus termasuk: mentakrifkan kelas pembanding, menulis semula kaedah bandingkan untuk menentukan logik perbandingan. Buat contoh pembanding. Gunakan kaedah Collections.sort, menghantar contoh koleksi dan pembanding.

Struktur dan algoritma data Java: penjelasan mendalam Struktur dan algoritma data Java: penjelasan mendalam May 08, 2024 pm 10:12 PM

Struktur data dan algoritma ialah asas pembangunan Java Artikel ini meneroka secara mendalam struktur data utama (seperti tatasusunan, senarai terpaut, pepohon, dll.) dan algoritma (seperti pengisihan, carian, algoritma graf, dll.) dalam Java. Struktur ini diilustrasikan dengan contoh praktikal, termasuk menggunakan tatasusunan untuk menyimpan skor, senarai terpaut untuk mengurus senarai beli-belah, tindanan untuk melaksanakan rekursi, baris gilir untuk menyegerakkan benang, dan pepohon dan jadual cincang untuk carian dan pengesahan pantas. Memahami konsep ini membolehkan anda menulis kod Java yang cekap dan boleh diselenggara.

Pemahaman mendalam tentang jenis rujukan dalam bahasa Go Pemahaman mendalam tentang jenis rujukan dalam bahasa Go Feb 21, 2024 pm 11:36 PM

Jenis rujukan ialah jenis data khas dalam bahasa Go Nilai mereka tidak menyimpan data itu sendiri secara langsung, tetapi alamat data yang disimpan. Dalam bahasa Go, jenis rujukan termasuk kepingan, peta, saluran dan penunjuk. Pemahaman mendalam tentang jenis rujukan adalah penting untuk memahami pengurusan memori dan kaedah pemindahan data bahasa Go. Artikel ini akan menggabungkan contoh kod khusus untuk memperkenalkan ciri dan penggunaan jenis rujukan dalam bahasa Go. 1. Slices Slices ialah salah satu jenis rujukan yang paling biasa digunakan dalam bahasa Go.

Struktur data PHP: Keseimbangan pepohon AVL, mengekalkan struktur data yang cekap dan teratur Struktur data PHP: Keseimbangan pepohon AVL, mengekalkan struktur data yang cekap dan teratur Jun 03, 2024 am 09:58 AM

Pokok AVL ialah pokok carian binari seimbang yang memastikan operasi data yang pantas dan cekap. Untuk mencapai keseimbangan, ia melakukan operasi belok kiri dan kanan, melaraskan subpokok yang melanggar keseimbangan. Pokok AVL menggunakan pengimbangan ketinggian untuk memastikan ketinggian pokok sentiasa kecil berbanding bilangan nod, dengan itu mencapai kerumitan masa logaritma (O(logn)) operasi carian dan mengekalkan kecekapan struktur data walaupun pada set data yang besar.

Analisis penuh rangka kerja pengumpulan Java: membedah struktur data dan mendedahkan rahsia storan yang cekap Analisis penuh rangka kerja pengumpulan Java: membedah struktur data dan mendedahkan rahsia storan yang cekap Feb 23, 2024 am 10:49 AM

Gambaran Keseluruhan Rangka Kerja Koleksi Java Rangka kerja pengumpulan Java ialah bahagian penting dalam bahasa pengaturcaraan Java Ia menyediakan satu siri perpustakaan kelas kontena yang boleh menyimpan dan mengurus data. Pustaka kelas kontena ini mempunyai struktur data yang berbeza untuk memenuhi keperluan penyimpanan dan pemprosesan data dalam senario yang berbeza. Kelebihan rangka kerja koleksi ialah ia menyediakan antara muka bersatu, membolehkan pembangun mengendalikan perpustakaan kelas kontena yang berbeza dengan cara yang sama, dengan itu mengurangkan kesukaran pembangunan. Struktur data rangka kerja pengumpulan Java Rangka kerja pengumpulan Java mengandungi pelbagai struktur data, setiap satunya mempunyai ciri unik dan senario yang boleh digunakan. Berikut adalah beberapa struktur data rangka kerja pengumpulan Java yang biasa: 1. Senarai: Senarai ialah koleksi tersusun yang membolehkan elemen diulang. Li

Ketahui rahsia struktur data bahasa Go secara mendalam Ketahui rahsia struktur data bahasa Go secara mendalam Mar 29, 2024 pm 12:42 PM

Kajian mendalam tentang misteri struktur data bahasa Go memerlukan contoh kod khusus Sebagai bahasa pengaturcaraan yang ringkas dan cekap, bahasa Go juga menunjukkan daya tarikannya yang unik dalam memproses struktur data. Struktur data adalah konsep asas dalam sains komputer, yang bertujuan untuk mengatur dan mengurus data supaya ia boleh diakses dan dimanipulasi dengan lebih cekap. Dengan mempelajari secara mendalam tentang misteri struktur data bahasa Go, kami dapat memahami dengan lebih baik cara data disimpan dan dikendalikan, seterusnya meningkatkan kecekapan pengaturcaraan dan kualiti kod. 1. Array Array ialah salah satu struktur data yang paling mudah

Peta Java Didedahkan: Petua dan Strategi untuk Capaian Data Pantas Peta Java Didedahkan: Petua dan Strategi untuk Capaian Data Pantas Feb 19, 2024 pm 06:21 PM

JavaMap ialah struktur data berasaskan pasangan nilai kunci yang membolehkan pembangun menyimpan dan mendapatkan semula data dengan cepat. Kekunci Peta boleh berupa sebarang objek, dan nilainya boleh berupa sebarang jenis data. Setiap kunci dalam Peta hanya boleh dikaitkan dengan paling banyak satu nilai Jika berbilang nilai ditetapkan untuk kunci yang sama, hanya nilai set terakhir akan dikekalkan. Terdapat dua pelaksanaan utama Map: HashMap: menggunakan jadual hash untuk menyimpan pasangan nilai kunci. Prestasi HashMap bergantung pada cara jadual cincang dilaksanakan dan dalam kebanyakan kes HashMap berprestasi lebih baik daripada TreeMap. TreeMap: menggunakan pokok merah-hitam untuk menyimpan pasangan nilai kunci. Prestasi TreeMap adalah serupa dengan HashMap, tetapi dalam beberapa kes, prestasi TreeMap boleh

Struktur data PHP SPL: Menyuntik kelajuan dan fleksibiliti ke dalam projek anda Struktur data PHP SPL: Menyuntik kelajuan dan fleksibiliti ke dalam projek anda Feb 19, 2024 pm 11:00 PM

Gambaran Keseluruhan Perpustakaan Struktur Data PHPSPL Pustaka struktur data PHPSPL (Perpustakaan Standard PHP) mengandungi satu set kelas dan antara muka untuk menyimpan dan memanipulasi pelbagai struktur data. Struktur data ini termasuk tatasusunan, senarai terpaut, tindanan, baris gilir dan set, setiap satunya menyediakan set kaedah dan sifat khusus untuk memanipulasi data. Tatasusunan Dalam PHP, tatasusunan ialah koleksi tertib yang menyimpan jujukan elemen. Kelas tatasusunan SPL menyediakan fungsi yang dipertingkatkan untuk tatasusunan PHP asli, termasuk pengisihan, penapisan dan pemetaan. Berikut ialah contoh menggunakan kelas tatasusunan SPL: useSplArrayObject;$array=newArrayObject(["foo","bar","baz"]);$array