C中的算法

时间:2009-07-06 08:33:28

标签: c algorithm

在C中学习算法的最佳位置或链接是什么?通过调查问题,您如何知道何时何地使用算法实现?

12 个答案:

答案 0 :(得分:13)

算法不一定与特定语言相关联,只是为了澄清,因此只要您能理解作为数据结构/算法的概念,任何算法书都会很有效。

那就是说,这似乎是个不错的选择:Algorithms in C。我的架子上有C++ equivalent

还有一本书似乎与语言无关(如果我错了,请纠正我),称为Data Structures & Algorithm's,虽然我听说它有点陈旧,所以你会错过更近期的结构。

不要忘记互联网上有大量信息available to you。然而,书籍通常更适合这些类型的东西。这是因为互联网资源往往只关注一件事。例如,在我们说List有O(1)[常数时间]删除时,您需要先了解Big-O notation之前的内容,然后才能理解它的含义。

本书将以正确的顺序涵盖这些内容,但互联网资源将专注于Big-O表示法或数据结构,但通常不会轻易连接这两者。


当谈到使用它时,你将主要建立关于你将对数据做什么的连接。

例如,如果您只需要有序元素,则可能需要vector(数组),但如果您需要有序元素并从任何地方删除(但可以牺牲随机访问),那么{{3}因为它的恒定时间去除会更合适。

答案 1 :(得分:5)

关于在C中实现常用算法的合理(虽然远非完美)一书,请尝试Sedgewick的Algorithms in C。请注意,对于任何技术主题,纸质书籍可能远远优于任何Web资源。

至于如何知道何时使用特定的算法,我担心这是体验。

答案 2 :(得分:5)

对于algortihms文本,Cormen,Leiserson和Rivest的'Introduction to Algorithms'是一个好的开始。伪代码实现很容易转换为C.两个Web资源,包含许多关于算法和示例实现的文档的链接:

答案 3 :(得分:4)

Sedgewick的

Algorithms in C是开始调查的好地方。一旦熟悉了可用的算法以及每种算法的性能特征,您就可以看到每个算法的使用位置。

答案 4 :(得分:4)

这是我主要与数学相关的算法的集合:

List of algorithms

FXT(数学相关)

Numerical Methods

Numerical Recipes in C

答案 5 :(得分:2)

  

您如何知道何时何地使用   算法的实现   只是调查问题

它被称为“模式匹配”,一旦你看到并解决了许多问题,你就会开始认识常见事物,并且可以重复使用你以前的知识。

顺便说一下,在开始使用C语言的算法之前,我会建议你在一本好书之前使用算法,这些算法比高级语言更难以实现且更容易出错,并且一旦你对一般语言非常有信心您可以在C中开始调整和优化它们的程序。

答案 6 :(得分:2)

许多好的资源已经被命名,所以我不会在这里重复它们。

至于你怎么知道什么算法在什么时候使用?

  • 你需要有一个足够大的工具箱,你可以通过坐下来浏览一长串基本(以及更深奥的)数据结构和算法。你应该尝试获得所有基础知识,但实际上只需要更专业的样本。

  • 您需要了解可用的权衡(时间,代码复杂性,内存,单次与多次通过,就地与复制,稳定与不稳定排序等等。 ad nauseum ),以及你研究的算法如何对这些算法做。同样,这只是一个很多研究的案例。 Big-O是一个开始的地方,但不是最终的全部,而是全部。

  • 您需要了解在遇到问题时您面临的真实限制是什么,以及如何根据上述算法权衡来表达这些限制。这需要一定程度的直觉,并且通常通过练习随着时间的推移而学习。

  • 值得一提的是,除了一种方式外,还要学习一些方法,学习内容,哪些方法有效,哪些无效。

  • 值得阅读比你自己更有经验的人写的代码,看看他们的想法。

祝你好运。

答案 7 :(得分:1)

Wikipedia List of Algorithms也是非常方便的参考 而且,如果你想要更深入 - The Art of Computer Programmingwikipedia ref) 最好在Robert Sedgewick的书中提到多个答案。

答案 8 :(得分:1)

我最近读了Kenneth Reek的Pointers on C。我以为我非常精通C语言,但这本书给了我一些顿悟,尽管它是针对初学者的。代码示例是美丽的东西(但不是x86类CPU上最快的代码)。它提供了许多正在使用的最常见算法和数据结构的良好实现,并对它们实现的原因进行了很好的解释(有时还有替代实现的代码或建议)。

在与您的问题相同的页面上:用于在C中创建可重用代码的模式(这是我们都想要的,不是吗?),C Interfaces and Implementations: Techniques for Creating Reusable Software,David R. Hanson。我阅读它已经有几年了,而且我没有副本来验证我记得的是正确的,但是如果我没记错的话,那就是如何创建好的C API:数据结构和算法,如以及一些最常见算法的示例实现。

主题:由于我主要用C语言编写一个用于私人用途的一次性程序,这个帮助我摆脱了一些不良编码习惯以及成为一个优秀的C语言参考:{{ 3}}。提醒我,我应该买那个。

答案 9 :(得分:1)

需要经验才能知道要用于特定问题的算法集。定义目标会有所帮助。速度,内存,稳健性,解决方案质量......都是决定使用哪种算法的因素。考虑到不同的因素和情景,我们可以针对同一问题设计不同的解决方案。

答案 10 :(得分:0)

答案 11 :(得分:0)

学习算法的一种简单方法是使用Wiki页面,该页面专门用于某些“经典”算法,如搜索算法或排序。算法的构造基于使用不同数据结构的能力,如链接列表或C.因此,首先尝试实现不同的数据结构,如简单的链表或二叉树,并尝试使用与真实相关的不同算法生活问题。