数据结构与算法分析—— 0、开篇

  思想徘徊了很久,最后终于决定开这样一个坑。以前总是认为自己水平低,写出来的博客或许还会存在误导作用,这样一种心理让自己始终不敢写。后来我明白了,写博客不是为了别人,而是为了自己。因为想要写出东西,必须要将脑海里零散的东西提炼出来,这个提炼的过程就是提升的过程。而且想要不误导别人,还可以不将文章发布出去嘛,哈哈哈!

  这一系列文章我准备用C语言来写,因为我的第一门语言就是C语言,我也很庆幸我是靠C语言入门编程的,这使我从一开始就有了与周围人与众不同的眼界。我是高中学历,20岁的时候去了某培训学校学了一年。在去培训学校之前,我去新华书店买过一本书,书名是《C语言从入门到精通》。虽然以现在的标准来看,这本书的内容并不怎么样,但当时确实是打开了我编程的大门。之后进了培训学校,在前两个月我又将《C Primer Plus》啃了下来。这样,我的编程算是真正的入门了。

  在当时我就知道有《数据结构》这么一门学科,也听说这门学科很重要,可惜当时不知道为什么会重要,甚至觉得学了好像没有什么用。于是当时就跟着一起学C#,开始学拖控件。再之后,就这么开始找工作了。

  终于在今年,瓶颈来了。类似于《CLR via C#》这一类的书,我发觉很难看懂。因为这其中大量涉及到操作系统、编译器相关的知识,虽然硬着头皮是可以看下去,然而我知道,我所遇到的瓶颈,远远不止这一点。

  在困惑之后,也终于确定了自己的方向。同时也是因为看到了周围的现象——一个工作了很多年的人,他却不知道SortedList和SortedDictionary的区别,不知道LINQ to SQL的原理,常年的做着重复的增删改查的事情,这样到了30岁,也无怪乎会退休了。所以,我才不想成为这种人。既然曾经是因为兴趣而入的行,那么就带着兴趣钻研到底,沉下心来学一些看起来并没有什么用的知识,不为外界所动摇,不被金钱所迷惑。而且,就算给我2W一月,也照样在深圳买不了房啊!钱多钱少,开心就好。

  那么就这样开始吧!第一篇博文,思绪有点发散,请大家见谅。

  

 

时间: 2024-11-21 00:57:50

数据结构与算法分析—— 0、开篇的相关文章

数据结构1:数据结构和算法分析

问题引出 假设有一道题目:有一组N个数而要确定其中第k个最大者,我们称之为选择问题,那么这个程序如何编写?最直观地,至少有两种思路: 1.将N个数读入一个数组中,再通过某种简单的算法,比如冒泡排序法,以递减顺序将数组排序,则第k个位置上的元素就是我们需要的元素 2.稍微好一些的做法,将k个元素读入数组并以递减顺序排序,接着将接下来的元素再逐个读入,当新元素被读到时,如果它小于数组中的第k个元素则忽略之,否则将其放到数组中正确的位置上,同时将数组中的一个元素挤出数组,当算法终止时,位于第k个位置上

《数据结构与算法分析》学习笔记(二)——算法分析

一.对算法分析方法的最简单的理解和使用方法 1.首先大家可能一般会被那些数学的概念搞晕,其实简单理解下来,就是假设任何语句执行的效率都是一样的,所以设定每一个语句的执行时间都是一个时间单位,那么只要计算这个程序到底执行了多少语句,就可以算出其时间复杂度. 2.其次就是我们要明白,我们是个估算,所以可以进行化简,明显我们可以忽略那些相对来说低阶的项,只分洗最高阶项.然后主要就是有这些常见的法则: (1)FOR循环 一次for循环的运行时间至多是该for循环内语句的运行时间乘以迭代次数. (2)嵌套

《数据结构与算法分析:C语言描述》复习——第十章“算法设计技巧”——Alpha-Beta剪枝

2014.07.08 22:43 简介: “搜索”与“剪枝”几乎是如影随形的.此处的“搜索”指的是带有回溯算法的深度优先搜索. 在之前的“Minimax策略”中我们给出了一个三连棋的程序,运行后你就知道计算一步棋要花多少时间. 为了计算最优的一步棋,我们可能需要递归9万多次.如果毫无疑问这种阶乘式的穷举过程必须通过剪枝来加速. 本篇介绍一种用于Minimax策略的剪枝思路——α-β剪枝. 剪枝的英语是pruning,所以不要想当然说成trimming. 图示: 在上一篇讲解Minimax策略的博

《数据结构与算法分析:C语言描述》复习——第四章“树”——AVL树

2014.06.15 16:22 简介: AVL树是一种高度平衡的二叉搜索树,其命名源自于联合发明算法的三位科学家的名字的首字母.此处“平衡”的定义是:任意节点的左右子树的高度相差不超过1.有了这个平衡的性质,使得AVL树的高度H总是接近log(N),因此各种增删改查的操作的复杂度能够保证在对数级别.没有bad case是AVL树与普通的二叉搜索树的最大区别.为了实现平衡性质,我们需要记录每个节点的高度(或者平衡因子)来检测不平衡的情况.为了修正高度不平衡,需要用到“旋转”的方法,分为单旋转和双

《数据结构与算法分析》引论:选择问题实现

在<数据结构与算法分析--C语言描述>的引论中有提到一个问题: 设有一组N个数而要确定其中第k个最大者. 被称为选择问题(selection problem). 后面有提到两种算法,下面是我根据描述,写的代码: /* * 来源:<数据结构与算法分析>引论 * 题目:选择性问题,从N个数中找出第k大者 * * */ #include <stdio.h> #include <stdlib.h> /* * 输出数组 * */ void printfArray(in

《数据结构与算法分析:C语言描述》复习——第六章“排序”——冒泡排序

2014.06.17 01:04 简介: 冒泡排序是O(n^2)级别的交换排序算法,原理简单,属于必知必会的基础算法之一. 思路: 排序要进行N轮,每一轮从尾部逐个向前扫描,遇到逆序对就进行交换.确保每一轮把最小的元素交换到前面去.这个过程好比水中的气泡向上飘,所以叫冒泡排序.代码非常简单,所以语言描述反而显得麻烦了. 实现: 1 // My implementation for bubble sort. 2 #include <iostream> 3 #include <vector&

数据结构和算法分析

转自[五月的仓颉] http://www.cnblogs.com/xrq730/p/5122436.html 数据结构 数据结构是计算机存储.组织数据的方式,是指数据相互之间存在一种或多种特定关系的数据元素的集合.通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率(这就是为什么我们要研究数据结构的原因),数据结构往往同高效的检索算法和索引技术相关. 常见的数据结构有数组.栈.队列.链表.树.散列等,这些数据结构将是本数据结构的分类中重点研究的对象. 算法分析 算法是为求解一个问题需要遵

《数据结构与算法分析:C语言描述》复习——第八章“并查集”——并查集

2014.06.18 14:16 简介: “并查集”,英文名为“union-find set”,从名字就能看出来它支持合并与查找功能.另外还有一个名字叫“disjoint set”,中文名叫不相交集合.可能我们倾向于用最短的名字,所以就出现了“并查集”翻译为“disjoint set”的情况.并查集是一种树形结构,但与之前讲的树不同的是,这里的树节点只记录父节点,因此是一对一的,就可以用数组来表示并查集. 图示: 并查集可以认为是一个“森林”,也就是多棵树: 既然是并查集,先看看合并3和5之后结

《数据结构与算法分析》学习笔记(五)&mdash;&mdash;队ADT

一.队的概念        队列也是一种表,但是是一种受限的表,只允许从一端插入,另一端山粗的表. 二.队列的数组实现 #define QMAXSIZE 100 typedef int Position; typedef int QElement; typedef struct queue { QElement Els[QMAXSIZE]; Position head,tail; }Queue; void QCreate(Queue &Q) { Q.head = Q.tail = 0; } vo