<commit_before>---
layout: post
title: 计算机科学基础1——重新开始学习数据结构
description: 我们为什么学习数据结构
category: tech
---

还记得大学的时候上数据结构课，那时刚刚接触计算机编程一个学期，只知道数据结构是计算机专业的一门核心课程，但对于这门课提及的各种数据结构学来有什么用，完全没有概念。于是，这门课可以说学的很被动，老师教什么，便也就照着记什么。课程结束了，怕也就忘记了一大半。多年之后进入职场，恍然发现当年的那些专业核心课程原来真的都有实际应用场景，遗憾当年没能体味这些学问的精妙之余，也在不断地问自己：如果让我重学一遍这些核心课程，我该如何学？

初学数据结构时，每一个概念对于我来说都非常的新鲜。彼时学习的重点也便聚焦在了什么是链表、桟、队列、树等等，以及如何用C语言来实现这些数据结构。再加上学到的一些粗浅的算法设计方法，便也觉得掌握了这些数据结构。现在回想起来，这学习过程中显然是漏掉了非常重要的一环，那就是这些数据结构从何而来？我们为什么要学习这些数据结构？

每一种数据结构或算法，都是从计算机专家们遇到的实际问题总结而来的。科学家们先是在实践中遇到了算法的性能或是空间存储限制问题，而后才会不断地改进数据结构与算法使得程序执行的效率达到最优。先有问题，然后针对性地寻找答案，这是一个自然而然的过程。如果脱离问题的背景，只凭空地考虑不同数据结构的异同，实在是不容易的。但偏偏在学生时代，我们面对的问题数据规模都十分有限，可以说数组就可以搞定一切。在这种情况下，学不透数据结构也就不稀奇了。
<commit_msg>update post name<commit_after>---
layout: post
title: 重新开始学习数据结构
description: 我们为什么学习数据结构
category: tech
---

还记得大学的时候上数据结构课，那时刚刚接触计算机编程一个学期，只知道数据结构是计算机专业的一门核心课程，但对于这门课提及的各种数据结构学来有什么用，完全没有概念。于是，这门课可以说学的很被动，老师教什么，便也就照着记什么。课程结束了，怕也就忘记了一大半。多年之后进入职场，恍然发现当年的那些专业核心课程原来真的都有实际应用场景，遗憾当年没能体味这些学问的精妙之余，也在不断地问自己：如果让我重学一遍这些核心课程，我该如何学？

初学数据结构时，每一个概念对于我来说都非常的新鲜。彼时学习的重点也便聚焦在了什么是链表、桟、队列、树等等，以及如何用C语言来实现这些数据结构。再加上学到的一些粗浅的算法设计方法，便也觉得掌握了这些数据结构。现在回想起来，这学习过程中显然是漏掉了非常重要的一环，那就是这些数据结构从何而来？我们为什么要学习这些数据结构？

每一种数据结构或算法，都是从计算机专家们遇到的实际问题总结而来的。科学家们先是在实践中遇到了算法的性能或是空间存储限制问题，而后才会不断地改进数据结构与算法使得程序执行的效率达到最优。先有问题，然后针对性地寻找答案，这是一个自然而然的过程。如果脱离问题的背景，只凭空地考虑不同数据结构的异同，实在是不容易的。但偏偏在学生时代，我们面对的问题数据规模都十分有限，可以说数组就可以搞定一切。在这种情况下，学不透数据结构也就不稀奇了。

{'fraction_non_alphanumeric': 0.08386638237384506, 'fraction_numerical': 0.0007107320540156361, 'mean_word_length': 28.95744680851064, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6949442', 'n_tokens_mistral': 1324, 'n_tokens_neox': 1565, 'n_words': 26}