Not Only Algorithm,不仅仅是算法,关注数学、算法、数据结构、程序员笔试面试以及一切涉及计算机编程之美的内容 。。

PING程序实现

PING是一个我们非常熟悉的网络命令了,可以检查网络是否通畅或者网络连接速度,使用起来非常方便。但PING是怎么实现的呢?本文将介绍PING的内部原理并实现一个简单的PING程序。

继续阅读»

取石子游戏

取石子是一种很有意思的游戏,一般给你若干堆石子,两个人根据指定规则轮流从中取若干石子,规定最后取光石子玩家获胜,假定双方玩家都采取最优策略,问先手是否有什么必胜策略。这个游戏看似简单,实则蕴含深刻的数学原理,本文将分析几种常见的取石子游戏的玩法。

继续阅读»

最远点对问题

二维平面上有n个点,怎么寻找距离最远的两个?
前面讨论过最近点对的问题,这里研究其相对的问题,虽然题目类似,但思想方法截然不同,本文将使用graham凸包扫描法和旋转卡壳算法进行求解。

继续阅读»

最近点对问题

二维平面上有n个点,怎么寻找距离最近的两个?
本文将实现一种O(nlogn)时间复杂度的分治算法,具体的思想方法参考了编程之美中寻找最近点对一章。

继续阅读»

C++11的多线程编程

C++11标准直接提供了并发编程的支持,这是C++新标准中非常重要的部分,可以极大的提高程序的可移植性。以前的多线程编程基本上依赖于特定的操作系统,比如Linux环境下使用pthread库。现在有了统一的接口进行实现,本文将通过几个简单的实例介绍常见的多线程编程的使用方法。

继续阅读»

C++11中的lambda表达式

lambda表达式是C++11新增加的一个特性,其允许程序员定义匿名函数,该函数一般比较短小,一次性执行,这样既方便了编程,又能防止外部访问。
本文将通过几个简单的例子说明lambda表达式的使用方法。

继续阅读»

外部排序

外部排序是指大量数据的排序,通常待排序的数据保存在外存储器上(比如硬盘),待排序的文件无法一次装入内存,需要在内存和硬盘之间进行多次数据交换,以达到排序整个文件的目的。外部排序最常用的算法是多路归并排序,本文将通过具体的代码讲解一个简单的外部排序算法实现。

继续阅读»

AVL树

AVL树是一种自平衡的二叉查找树(Balanced Binary Tree),由于其任意节点的左右子树的高度差至多为一,查找、插入、删除等操作的复杂度在平均和最坏情况下都是O(log n)。AVL树和红黑树都是平衡的二叉查找树,但二者有一些细微的区别,本文将详细讲解AVL树的原理与实现,并且部分实现过程参照了红黑树,具体可以参考 红黑树

继续阅读»

Linux内核中的链表

链表是最基本的数据结构之一,Linux的内核中也广泛使用了链表,特别是双向链表,比如进程的描述符、设备列表以及各种功能模块中的数据组织。
但是Linux内核中链表的实现方式比较特殊,本文将介绍其实现细节及如何在自己的程序中使用这个链表。

继续阅读»

编写最简单的内核:HelloWorld

内核是操作系统最核心的内容,主要提供硬件抽象层、磁盘及文件系统控制、多任务等功能,由于其涉及非常广泛的计算机知识,很少被人们所熟悉,因而披上了一层神秘的面纱。
本文将从零开始实现一个最简单的内核,其可以通过x86系统的GRUB引导启动,并向屏幕输出“Hello World!“字符串。该内核代码非常简短,并且在本人的Debian 7系统中可以正常运行。

继续阅读»

CJSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也方便机器解析和生成,成为一种理想的数据交换语言。
CJSON是一个用c写的JSON解析器,它非常小巧,只有单个文件,使用起来非常方便,本文将简单介绍CJSON的使用方法。

继续阅读»

Linux内核红黑树原理与使用

红黑树(Red-Black Tree,RBT)是一种平衡的二叉查找树,前面的红黑树原理与实现这篇文章中详细介绍了红黑树的细节。在Linux的内核源代码中已经给我们实现了一棵红黑树,我们可以方便地拿过来进行使用。
本文将参考Linux内核的源码和文档资料,介绍Linux内核中红黑树的实现细节及使用方法。

继续阅读»

do {…} while(0)

do {…} while(0)是很多项目,比如Linux内核源代码,中经常遇到的代码,表面上看毫无意义,但其中包含了一个巧妙的编程技巧。
本文将对这个问题做一个简单的分析。

继续阅读»

红黑树

二叉查找树可以方便地维护一个动态集合,实现快速的添加、删除以及查询操作。但仅仅当树的高度较低时执行速度较快,当树的高度增加甚至变得极度不平衡时,各种操作的性能急剧下降。红黑树(Red-Black Tree,RBT)是一种平衡的二叉查找树,能在最坏情况下仍然获得较好的时间复杂度。目前C++ STL中包括set、multiset、map、multimap等多种数据结构内部都使用了红黑树或者其变体进行实现。
本文参考算法导论中红黑树章节,将详细介绍红黑树的原理及其在C/C++中的具体实现代码。注意,红黑树的思想及实现跟普通的二叉查找树关系非常大,如果你对二叉查找树还不是非常熟悉,建议先阅读此文:二叉查找树 http://noalgo.info/603.html

继续阅读»

Debian下编译Linux内核

内核是操作系统的核心,负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。但是系统默认的内核可能带有许多我们并不需要的特性,或者需要的特性而又不支持,这时我们可以自己手动编译安装一个新的内核,完全定制一个专属的内核版本。
本文将介绍在Debian下编译Linux内核的方法。

继续阅读»

分页: 第一页 «上一页 12345678910 下一页 » 最后一页

我的博客

NoAlGo头像编程这件小事牵扯到太多的知识,很容易知其然而不知其所以然,但真正了不起的程序员对自己程序的每一个字节都了如指掌,要立足基础理论,努力提升自我的专业修养。

站内搜索

最新评论