程序设计实践(2)----算法

程序设计实践(2)----算法

1 每个程序都要依靠算法与数据结构,但很少有程序依赖于必须发明一批全新的东西。即使是很复杂的程序,比如在编译器或者网络浏览器里,主要的数据结构也是数组、表、树和散列表等等。如果在一个程序里要求某些更精巧的东西,它多半也是基于这些简单东西构造起来的。因此,对大部分程序员而言,所需要的是知道有哪些合适的、可用的算法和数据结构,知道如何在各种可以互相替代的东西之中做出选择

2 如果你正要进入一个新领域去开发程序,那么首先需要弄清楚在这里已经有了些什么,以免无谓地把时间浪费在别人早已做好的东西上

3 散列表如果使用得当,常数时间的检索、插入和删除操作是任何其他技术都望尘莫及的。但是要选择合适的散列函数.

      一个比较好的散列函数,对字符串散列:

 enum {MULTIPLIER = 31};

 unsigned int hash(char *str)

{

      unsigned int h;

      unsigned char *p;

      h = 0;

      for(p= (unsigned char*)str;p != ‘/ 0’ ;p++)

           h = MULTIPLIER * h + *p;

      return h % NHASH;

}

4 由于的许多结点包含多个指向其他元素的指针,所以,很多在表或者数组结构中需要O(n)时间的操作,在树中只需要O( l o gn)时间。结点存在多个指针能减少为寻找一个结点所需要访问的结点个数,从而降低操作的复杂性。

5 特别适合那些需要在中间插入和删除的情况,也适用于管理一批规模经常变动的无顺序数据,特别是当数据的访问方式接近后进先出( L I F O )的情况时(类似于栈的情况)。如果程序里存在多个互相独立地增长和收缩的栈,采用表比用数组能更有效地利用存储。当信息之间有一种内在顺序,就像一些事先不知道长短的链,例如文本中顺序的一系列单词,用表实现也非常合适。如果同时还必须对付频繁的更新和随机访问,那么最好就是使用某些非线性的数据结构,例如树或者散列表等。

6 如果一个数据集合里的项经常变化,特别是如果项的数目无法预计时,表是一种可行的存储它们的方式。经过这些比较,我们容易看到,数组更适合存储相对静态的数据

7 尽量使用库中提供的函数,以避免出错,提高效率.

8 数组在检索时尽量使用二分检索,以提高效率.

9 好的排序算法有快速排序,堆排序.应尽量使用他们.

 

你可能感兴趣的:(数据结构,算法,网络,浏览器,存储,编译器)