1. 解决一个复杂的问题的时候,肯能先想到的是如何建模,建模之后,怎么去求解这个问题。求解一个问题的时候,需要用到算法的时候,我们应该想到的是该算法需要什么样的数据结构。可能涉及一个算法最原始的数据结构,可能就比较复杂。
怎么样对一个算法来进行优化,我想从学完数据结构的角度来谈谈,总共有3个方面:
第一:可能就是算法本身,比如在排序过程中,我们知道快速排序在相对的情况下,要比冒泡排序更加高效,这就是为什么都是排序,我们为什么不选择好的算法,从算法本身来下手呢?
第二:可能就是合适的数据结构,能够给算法带来相当大的帮助,会加速算法的优化和改进。
在线性关系中同样是取数据元素本身,为什么我们不选择数组,非要选择链表呢?数组具有随机访问性。
第三:可能就是预处理本身,对算法改进也起很大的作用,在线性关系中,我们去寻找数据元素,可能使用的方法本身就是顺序查找,或者是二分查找法,如果我们预先对数据进行排序,然后我们查找数据选择二分查找这样不是很高效吗?
2.数据结构建立的思路?
在c,以及c++写算法的时候,可能更倾向于使用指针和结构体。在Java等其他纯面向对象的语言中可能更倾向于使用引用和类。总之大同小异,
一个数据结构的建立,不应该只不包括数据元素本身,还应该包括数据数据元素之间的关系,从整体上把握。
一个数据结构的建立,都不是一蹴而就的,可以把经常用到的东西,放入数据结构本身,让其跟着数据结构走,从而在解决问题的时候,可以让他们建立关联。
3.示例如下:
再线性关系中,我们使用数组和链表来作为数据结构。
线性关系,数组:数组本身存放数据,数组下标存放数据之间的关系。然后在将插入和删除的时候,可能需要用到实际插入数组的个数,这是在考虑实际长度,在结构体重放入length,这个实际变量,来表示实际插入数组的个数。
线性关系:链表,数据元素本身不说呢,将数据元素关系表现为用指针实现,存放下个结点的地址,因而它的数据结构,就这样形成了。
4.逻辑结构,物理结构,算法,数据结构之间的联系和区别?
数据结构包含逻辑结构和物理结构。数据结构和算法是不分离的,数据结构的目的就是为算法服务,算法的建立,本身就要求一定的数据结构。逻辑结构,就是数据元素之间的关系,这个关系通常指的是映射关系(一对一,一对多,多对多)就起关系来说,一对一,就是线性关系,一对多就是树,多对多就是图。物理结构:在计算机中应当怎么样去存储数据元素,以及数据元素之间的关系。