2018年2月24日

读写锁

摘要: 1、概述 读写锁与互斥量类似,不过读写锁允许更高的并行性。互斥量要么是锁住状态,要么是不加锁状态,而且一次只有一个线程对其加锁。读写锁可以有三种状态:读模式下加锁状态,写模式下加锁状态,不加锁状态。一次只有一个线程可以占有写模式的读写锁,但是多个线程可用同时占有读模式的读写锁。读写锁也叫做共享-独占 阅读全文

posted @ 2018-02-24 16:04 AlanTu 阅读(247) 评论(0) 推荐(0)

System V 消息队列 - 复用消息

摘要: 消息队列中的消息结构可以由我们自由定义,具备较强的灵活性。通过消息结构可以共享一个队列,进行消息复用。通常定义一个类似如下的消息结构: #define MSGMAXDAT 1024 struct mymsg { long msg_len; //消息长度 long msg_type; //消息类型 l 阅读全文

posted @ 2018-02-24 16:03 AlanTu 阅读(217) 评论(0) 推荐(0)

System V 消息队列

摘要: 1、概述 消息队列可以认为是一个消息链表,System V 消息队列使用消息队列标识符标识。具有足够特权的任何进程都可以往一个队列放置一个消息,具有足够特权的任何进程都可以从一个给定队列读出一个消息。在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。System V 消 阅读全文

posted @ 2018-02-24 16:01 AlanTu 阅读(454) 评论(0) 推荐(0)

System V IPC

摘要: 1、概述 System V IPC共有三种类型:System V消息队列、System V 信号量、System V 共享内存区。 System V IPC操作函数如下: 2、key_t键和ftok函数 三种类型的IPC使用key_t值作为他们的名字,头文件<sys/types.h>把key_t定义 阅读全文

posted @ 2018-02-24 15:58 AlanTu 阅读(449) 评论(0) 推荐(0)

Unix环境高级编程(二十)伪终端

摘要: 1、综述 伪终端对于一个应用程序而言,看上去像一个终端,但事实上伪终端并不是一个真正的终端。从内核角度看,伪终端看起来像一个双向管道,而事实上Solaris的伪终端就是用STREAMS构建的。伪终端总是成对地使用的,就好像是个管道的两端。一端的设备称为"主设备"(master),另一端的设备称为"从 阅读全文

posted @ 2018-02-24 15:57 AlanTu 阅读(1573) 评论(0) 推荐(0)

Unix环境高级编程(二十一)数据库函数库

摘要: 本章的内容是开发一个简单的、多用户数据库的C函数库。调用此函数库提供的C语言函数,其他程序可以读取和存储数据库中的记录。绝大部分商用数据库函数库提供多进程同时更新数据库所需要的并发控制,采用建议记录锁、B+树、动态散列实现数据库。 1、函数库 开发类似ndbm函数库,增加了并发控制机制,从而允许多进 阅读全文

posted @ 2018-02-24 15:57 AlanTu 阅读(442) 评论(0) 推荐(0)

Unix环境高级编程(十九)终端I/O

摘要: 终端I/O应用很广泛,用于终端、计算机之间的直接连线、调制解调器以及打印机等等。终端I/O有两种不同的工作模式: (1)规范模式输入处理:终端输入以行为单位进行处理,对于每个读要求,终端驱动程序最多返回一行。(默认模式) (2)非规范模式输入处理:输入字符并不组成行。 终端设备是由一般位于内核的终端 阅读全文

posted @ 2018-02-24 15:55 AlanTu 阅读(733) 评论(0) 推荐(0)

Unix环境高级编程(十八)高级进程间通信

摘要: 本章主要介绍了基于STREAM的管道和UNIX域套接字,这些IPC可以在进程间传送打开文件描述符。服务进程可以使用它们的打开文件描述符与指定的名字相关联,客户进程可以使用这些名字与服务器进程通信。 1、基于STREAMS的管道 STREAMS pipe是一个双向(全双工)管道,单个STREAMS管道 阅读全文

posted @ 2018-02-24 15:54 AlanTu 阅读(1066) 评论(0) 推荐(0)

Unix环境高级编程(十七)网络IPC套接字

摘要: 通过网络套接字可以使得不同计算机上运行的进程相互通信。 1、创建套接字 #include <sys/socket.h> Int socket( int domain, int type, int protocol); 注意:AF_LOCAL域是AF_UNIX的别名,AF_UNSPEC域可以代表任何域 阅读全文

posted @ 2018-02-24 15:49 AlanTu 阅读(399) 评论(0) 推荐(0)

Unix环境高级编程(十六)进程间通信

摘要: 进程间通信(IPC)是指能在两个进程间进行数据交换的机制。现代OS都对进程有保护机制,因此两个进程不能直接交换数据,必须通过一定机制来完成。 IPC的机制的作用: (1)一个软件也能更容易跟第三方软件或内核进行配合的集成,或移植.如管道,在shell 下执行 ps –aux | grep bash。 阅读全文

posted @ 2018-02-24 15:47 AlanTu 阅读(1182) 评论(0) 推荐(0)

Unix环境高级编程(十五)高级I/O

摘要: 1、非阻塞I/O 对低速设备的I/O操作可能会使进程永久阻塞,这类系统调用主要有如下情况:(1)如果数据并不存在,则读文件可能会使调用者永远阻塞(例如读管道、终端设备和网络设备)。(2)如果数据不能立即被接受,则写这些同样的文件也会使调用者永远阻塞;(3)在某些条件发生之前,打开文件会被阻塞(例如以 阅读全文

posted @ 2018-02-24 15:46 AlanTu 阅读(514) 评论(0) 推荐(0)

Unix环境高级编程(十四)守护进程实现时间服务器

摘要: 守护进程是在后台运行不受终端控制的进程(如输入、输出等),一般的网络服务都是以守护进程的方式运行。守护进程脱离终端的主要原因有两点:(1)用来启动守护进程的终端在启动守护进程之后,需要执行其他任务。(2)(如其他用户登录该终端后,以前的守护进程的错误信息不应出现)由终端上的一些键所产生的信号(如中断 阅读全文

posted @ 2018-02-24 15:45 AlanTu 阅读(316) 评论(0) 推荐(0)

Unix环境高级编程(十三)守护进程

摘要: 守护进程也称为精灵进程是一种生存期较长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他们常常在系统引导装入时启动,在系统关闭时终止。unix系统有很多守护进程,大多数服务器都是用守护进程实现的,例如inetd守护进程。 1、守护进程的特征 用ps命令察看一些常用的系 阅读全文

posted @ 2018-02-24 15:43 AlanTu 阅读(524) 评论(0) 推荐(0)

Unix环境高级编程(十二)线程控制

摘要: 本章介绍了一个进程中多个线程之间如何保持数据的似有性及进程的系统调用如何与线程进行交互。 1、线程限制: Single Unix定义了一线线程操作的限制,和其他的限制一样,可以通过sysconf来查询。和其它的限制使用目的一样,为了应用程序的在不同操作 系统的可移植性。 一些限制: PTHREAD_ 阅读全文

posted @ 2018-02-24 15:42 AlanTu 阅读(823) 评论(0) 推荐(0)

Unix环境高级编程(十一)线程

摘要: 一个进程在同一时刻只能做一件事情,线程可以把程序设计成在同一时刻能够做多件事情,每个线程处理各自独立的任务。线程包括了表示进程内执行环境必需的信息,包括进程中标识线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量以及线程似有数据。进程的所有信息对该进程的所有线程都是共享的 阅读全文

posted @ 2018-02-24 15:39 AlanTu 阅读(449) 评论(0) 推荐(0)

Unix环境高级编程(十)信号续

摘要: 1、signal函数 Unix系统的信号机制最简单的接口是signal函数,函数原型如下: #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t hand 阅读全文

posted @ 2018-02-24 15:36 AlanTu 阅读(327) 评论(0) 推荐(0)

Unix环境高级编程(九)信号

摘要: 信号时软中断,很多比较重要的应用程序都需要处理信号,信号提供了一种处理异步事件的方法。每个信号都一个名字,以SIG开头,在<signal.h>头文件中定义信号类型,都是正整数(信号编号)。 产生信号的条件: (1)当用户按某些终端键时,引发终端产生的信号。 (2)硬件异常产生信号。 (3)进程调用k 阅读全文

posted @ 2018-02-24 15:30 AlanTu 阅读(364) 评论(0) 推荐(0)

Unix环境高级编程(八)进程关系

摘要: 本章看后给人似懂非懂的感觉,主要是不知道实际当中如何去使用。通过前面几章的学习,每个进程都有一个父进程,当子进程终止时,父进程得到通知并取得子进程的退出状态。先将本章基本的知识点总结如下,日后再看时候好好总结一下。 1、终端登录 介绍了有终端登录Unix系统的过程。通过init进程读文件/etc/t 阅读全文

posted @ 2018-02-24 15:27 AlanTu 阅读(272) 评论(0) 推荐(0)

Unix环境高级编程(七)fork函数总结

摘要: 在Unix/Linux中用fork函数创建一个新的进程。进程是由当前已有进程调用fork函数创建,分叉的进程叫子进程,创建者叫父进程。该函数的特点是调用一次,返回两次,一次是在父进程,一次是在子进程。两次返回的区别是子进程的返回值为0,父进程的返回值是新子进程的ID。子进程与父进程继续并发运行。如果 阅读全文

posted @ 2018-02-24 15:26 AlanTu 阅读(820) 评论(0) 推荐(0)

Unix环境高级编程(六)进程控制

摘要: 本章介绍Unix的进程控制,包括进程创建,执行程序和进程终止,进程的属性,exec函数系列,system函数,进程会计机制。 1、进程标识符 每一个进程都有一个非负整数标识的唯一进程ID。ID为0表示调度进程,即交换进程,是内核的一部分,也称为系统进程,不执行任何磁盘操作。ID为1的进程为init进 阅读全文

posted @ 2018-02-24 15:25 AlanTu 阅读(399) 评论(0) 推荐(0)

Unix环境高级编程(五)进程环境

摘要: 本章主要介绍了Unix进程环境,包含main函数是如何被调用的,命令行参数如何传递,存储方式布局,分配存储空间,环境变量,进程终止方法,全局跳转longjmp和setjmp函数及进程的资源限制。 main函数的原型为int main(int argc,char *argv[]);其中argc是命令行 阅读全文

posted @ 2018-02-24 15:23 AlanTu 阅读(353) 评论(0) 推荐(0)

Unix环境高级编程(四)数据系统文件和信息

摘要: 本章主要介绍了Unix系统的正常运行要使用的与系统有关的数据文件和信息。如:口令文件,阴影文件、组文件、附加组、系统标识、时间和日期历程。 口令文件,即Unix系统用户数据库,存储在/etc/passwd中,是一个ASCII文件,包含的字段信息在<pwd.h>定义的passwd数据结构中。 stru 阅读全文

posted @ 2018-02-24 15:22 AlanTu 阅读(605) 评论(0) 推荐(0)

Unix环境高级编程(三)标准I/O库

摘要: 标准I/O库是ISO C的标准,在很多操作系统上面都实现。Unix文件I/O函数都是针对文件描述符的,当打开一个文件的时候,返回该文件描述符用于后续的I/O操作。而对于标准I/O库,操作则是围绕流进行,当用标准I/O库打开或者创建一个文件时,使得一个流与文件相关联。标准I/O库使用了缓冲技术,使用缓 阅读全文

posted @ 2018-02-24 15:20 AlanTu 阅读(251) 评论(0) 推荐(0)

Unix环境高级编程(二)文件和目录

摘要: 本章主要介绍的是文件结构及目录。重点是通过stat函数获取文件的结构信息,然后是文件目录及其遍历。学完本章后,编写了一个输出给的目录下的文件信息的程序。 首先是包含在<sys/stat.h>文件下的stat、fstat、lstat三个函数,三个函数的原型如下: int stat(const char 阅读全文

posted @ 2018-02-24 15:19 AlanTu 阅读(506) 评论(0) 推荐(0)

Unix环境高级编程(一)文件I/O

摘要: Unix系统中大多数文件I/O只需用到五个函数:open、read、write、lseek、close。本章说介绍的I/O是不带缓冲的,即:每个read和write都调用内核中的一个系统调用。不是ISO C的组成部分。对于内核而言,所有打开的文件都通过文件描述符引用。 在<unistd.h>中定义三 阅读全文

posted @ 2018-02-24 15:18 AlanTu 阅读(302) 评论(0) 推荐(0)

Linux下C结构体初始化

摘要: 1、前言 今天在公司看一同事写的代码,代码中用到了struct,初始化一个struct用的是乱序格式,如下代码所示: typedef struct _data_t { int a; int b; }data_t; data_t data = { .a = 10, .b = 20, }; 通常初始化一 阅读全文

posted @ 2018-02-24 15:14 AlanTu 阅读(4963) 评论(0) 推荐(0)

__attribute__中constructor和destructor

摘要: 1、前言 最近看到一份代码,看到一个函数前面用__attribute__((destructor))修饰,当时感觉有点怪怪的,搜了整个程序,也没发现哪个地方调用这个函数。于是从字面意思猜想,该函数会在程序结束后自动调用,与C++中的析构函数类似。第一次接触GNU下的attribute,总结一下。 2 阅读全文

posted @ 2018-02-24 15:12 AlanTu 阅读(12111) 评论(0) 推荐(0)

C语言指针转换为intptr_t类型

摘要: 1、前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量。由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针。感觉很奇怪,为何要将一个指针这样做呢?如是果断上网查查,发现我的感觉是错误的,所以,任何事情不能凭感觉,要弄清楚来龙去脉。先总结 阅读全文

posted @ 2018-02-24 15:11 AlanTu 阅读(8036) 评论(0) 推荐(0)

C语言sprintf与sscanf函数

摘要: 1、前言 我们经常涉及到数字与字符串之间的转换,例如将32位无符号整数的ip地址转换为点分十进制的ip地址字符串,或者反过来。从给定的字符串中提取相关内容,例如给定一个地址:http://www.bokeyuan.cn:2345,我们要从地址中提出协议,主机地址和端口号。之前对字符串和数字之间的关系 阅读全文

posted @ 2018-02-24 15:10 AlanTu 阅读(1441) 评论(0) 推荐(0)

C语言宏高级用法

摘要: 1、前言 今天看代码时候,遇到一些宏,之前没有见过,感觉挺新鲜。如是上网google一下,顺便总结一下,方便以后学习和运用。C语言程序中广泛的使用宏定义,采用关键字define进行定义,宏只是一种简单的字符串替换,根据是否带参数分为无参和带参。宏的简单应用很容易掌握,今天主要总结一下宏的特殊符号及惯 阅读全文

posted @ 2018-02-24 15:10 AlanTu 阅读(28111) 评论(0) 推荐(1)

C语言栈与调用惯例

摘要: 1、前言 最近在再看《程序员的自我修养》这本书,对程序的链接、装载与库有了更深入的认识。关于这本书的评价可以去豆瓣看看http://book.douban.com/subject/3652388/,强烈推荐给每一位程序员哈。今天看了第十章内存,主要讲的是栈和堆的管理。主要问题是:函数在栈中是如何布局 阅读全文

posted @ 2018-02-24 15:09 AlanTu 阅读(590) 评论(0) 推荐(0)

C语言二维数组作为函数的参数

摘要: 前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数。在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示。我写程序的错误如下程序所示: 1 #include <cstdio> 2 void print(int *a[3]) 3 { 4 printf("%d\n" 阅读全文

posted @ 2018-02-24 15:08 AlanTu 阅读(70339) 评论(1) 推荐(7)

递归与尾递归总结

摘要: 前言:今天上网看帖子的时候,看到关于尾递归的应用(http://bbs.csdn.net/topics/390215312),大脑中感觉这个词好像在哪里见过,但是又想不起来具体是怎么回事。如是乎,在网上搜了一下,顿时豁然开朗,知道尾递归是怎么回事了。下面就递归与尾递归进行总结,以方便日后在工作中使用 阅读全文

posted @ 2018-02-24 15:07 AlanTu 阅读(9131) 评论(0) 推荐(0)

linux系统调用sysconf

摘要: 1、前言 当前计算机都是多核的,linux2.6提供了进程绑定cpu功能,将进程指定到某个core上执行,方便管理进程。linux提供了sysconf系统调用可以获取系统的cpu个数和可用的cpu个数。 2、sysconf 函数 man一下sysconf,解释这个函数用来获取系统执行的配置信息。例如 阅读全文

posted @ 2018-02-24 15:03 AlanTu 阅读(595) 评论(0) 推荐(0)

一道C语言安全编码题目

摘要: 1、前言 最近在网上看到一道C语言题目,用C语言实现一个函数,给定一个int类型的整数,函数输出逆序的整数,例如输入123,则输出字符串"321",,输入-123,则输出字符串"-321"。题目要求,不使用标准库,不得分配内存。当时觉得蛮简单的,这不就是类似字符串逆转嘛,自己尝试做了一下,测试发现, 阅读全文

posted @ 2018-02-24 15:01 AlanTu 阅读(453) 评论(0) 推荐(0)

深度解析(一六)Floyd算法

摘要: Floyd算法(一)之 C语言详解 本章介绍弗洛伊德算法。和以往一样,本文会先对弗洛伊德算法的理论论知识进行介绍,然后给出C语言的实现。后续再分别给出C++和Java版本的实现。 目录 1. 弗洛伊德算法介绍 2. 弗洛伊德算法图解 3. 弗洛伊德算法的代码说明 4. 弗洛伊德算法的源码 转载请注明 阅读全文

posted @ 2018-02-24 14:37 AlanTu 阅读(605) 评论(0) 推荐(0)

深度解析(十五)哈夫曼树

摘要: 哈夫曼树(一)之 C语言详解 本章介绍哈夫曼树。和以往一样,本文会先对哈夫曼树的理论知识进行简单介绍,然后给出C语言的实现。后续再分别给出C++和Java版本的实现;实现的语言虽不同,但是原理如出一辙,选择其中之一进行了解即可。若文章有错误或不足的地方,请帮忙指出! 目录 1. 哈夫曼树的介绍 2. 阅读全文

posted @ 2018-02-24 14:18 AlanTu 阅读(1969) 评论(0) 推荐(0)

常用排序算法(九)基数排序

摘要: 基数排序 概要 本章介绍排序算法中的基数排序。内容包括:1. 基数排序介绍2. 基数排序图文说明3. 基数排序实现3.1 基数排序C实现3.2 基数排序C++实现3.3 基数排序Java实现 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3603669. 阅读全文

posted @ 2018-02-24 14:07 AlanTu 阅读(347) 评论(0) 推荐(0)

常用排序算法(八)桶排序

摘要: 桶排序 概要 本章介绍排序算法中的桶排序。内容包括:1. 桶排序介绍2. 桶排序图文说明3. 桶排序实现3.1 桶排序C实现3.2 桶排序C++实现3.3 桶排序Java实现 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3602737.html 更多排 阅读全文

posted @ 2018-02-24 14:05 AlanTu 阅读(308) 评论(0) 推荐(0)

常用排序算法(七)归并排序

摘要: 归并排序 概要 本章介绍排序算法中的归并排序。内容包括:1. 归并排序介绍2. 归并排序图文说明3. 归并排序的时间复杂度和稳定性4. 归并排序实现4.1 归并排序C实现4.2 归并排序C++实现4.3 归并排序Java实现 转载请注明出处:http://www.cnblogs.com/skywan 阅读全文

posted @ 2018-02-24 14:03 AlanTu 阅读(367) 评论(0) 推荐(0)

常用排序算法(六)堆排序

摘要: 堆排序 概要 本章介绍排序算法中的堆排序。 目录1. 堆排序介绍2. 堆排序图文说明3. 堆排序的时间复杂度和稳定性4. 堆排序实现4.1 堆排序C实现4.2 堆排序C++实现4.3 堆排序Java实现 转载请注明出处:http://www.cnblogs.com/skywang12345/p/36 阅读全文

posted @ 2018-02-24 14:01 AlanTu 阅读(552) 评论(0) 推荐(0)

常用排序算法(五)选择排序

摘要: 选择排序 概要 本章介绍排序算法中的选择排序。 目录1. 选择排序介绍2. 选择排序图文说明3. 选择排序的时间复杂度和稳定性4. 选择排序实现4.1 选择排序C实现4.2 选择排序C++实现4.3 选择排序Java实现 转载请注明出处:http://www.cnblogs.com/skywang1 阅读全文

posted @ 2018-02-24 13:58 AlanTu 阅读(152) 评论(0) 推荐(0)

常用排序算法(四)希尔排序

摘要: 希尔排序 概要 本章介绍排序算法中的希尔排序。内容包括:1. 希尔排序介绍2. 希尔排序图文说明3. 希尔排序的时间复杂度和稳定性4. 希尔排序实现4.1 希尔排序C实现4.2 希尔排序C++实现4.3 希尔排序Java实现 转载请注明出处:http://www.cnblogs.com/skywan 阅读全文

posted @ 2018-02-24 13:48 AlanTu 阅读(284) 评论(0) 推荐(0)

常用排序算法(三)直接插入排序

摘要: 直接插入排序 概要 本章介绍排序算法中的直接插入排序。内容包括:1. 直接插入排序介绍2. 直接插入排序图文说明3. 直接插入排序的时间复杂度和稳定性4. 直接插入排序实现4.1 直接插入排序C实现4.2 直接插入排序C++实现4.3 直接插入排序Java实现 转载请注明出处:http://www. 阅读全文

posted @ 2018-02-24 13:40 AlanTu 阅读(451) 评论(0) 推荐(0)

常用排序算法(二)快速排序

摘要: 快速排序 概要 本章介绍排序算法中的快速排序。 目录1. 快速排序介绍2. 快速排序图文说明3. 快速排序的时间复杂度和稳定性4. 快速排序实现4.1 快速排序C实现4.2 快速排序C++实现4.3 快速排序Java实现 转载请注明出处:http://www.cnblogs.com/skywang1 阅读全文

posted @ 2018-02-24 13:22 AlanTu 阅读(221) 评论(0) 推荐(0)

常用排序算法(一)冒泡排序

摘要: 冒泡排序 概要 本章介绍排序算法中的冒泡排序,重点讲解冒泡排序的思想。 目录1. 冒泡排序介绍2. 冒泡排序图文说明3. 冒泡排序的时间复杂度和稳定性4. 冒泡排序实现4.1 冒泡排序C实现4.2 冒泡排序C++实现4.3 冒泡排序Java实现 转载请注明出处:http://www.cnblogs. 阅读全文

posted @ 2018-02-24 13:20 AlanTu 阅读(494) 评论(0) 推荐(0)

Linux内核中双向链表的经典实现

摘要: Linux内核中双向链表的经典实现 概要 前面一章"介绍双向链表并给出了C/C++/Java三种实现",本章继续对双向链表进行探讨,介绍的内容是Linux内核中双向链表的经典实现和用法。其中,也会涉及到Linux内核中非常常用的两个经典宏定义offsetof和container_of。内容包括:1. 阅读全文

posted @ 2018-02-24 12:38 AlanTu 阅读(1801) 评论(0) 推荐(0)

回溯法 - 数据结构与算法

摘要: 1.回溯法算法思想: 定义: 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 1、回溯法适用:有许多问题,当需要找出它的解 阅读全文

posted @ 2018-02-24 11:07 AlanTu 阅读(2192) 评论(0) 推荐(0)

迪杰斯特拉Dijkstra算法介绍

摘要: 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。 基本思想 通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算)。 此外,引进两个集合S和U。S 阅读全文

posted @ 2018-02-24 11:06 AlanTu 阅读(1606) 评论(0) 推荐(0)

Kruskal算法 - C语言详解

摘要: 最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。 例如,对于如上图G4所示的连通网可以有多棵权值总和不相同的生成树。 克鲁斯卡尔算法介绍 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成 阅读全文

posted @ 2018-02-24 11:05 AlanTu 阅读(1148) 评论(0) 推荐(0)

普里姆Prim算法介绍

摘要: 普里姆(Prim)算法,和克鲁斯卡尔算法一样,是用来求加权连通图的最小生成树的算法。 基本思想 对于图G而言,V是所有顶点的集合;现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T存放G的最小生成树中的边。 从所有uЄU,vЄ(V-U) (V-U表示出去U的所有顶点)的边中选取权 阅读全文

posted @ 2018-02-24 11:05 AlanTu 阅读(1012) 评论(0) 推荐(0)

拓扑排序介绍

摘要: 拓扑排序介绍 拓扑排序(Topological Order)是指,将一个有向无环图(Directed Acyclic Graph简称DAG)进行排序进而得到一个有序的线性序列。 这样说,可能理解起来比较抽象。下面通过简单的例子进行说明! 例如,一个项目包括A、B、C、D四个子部分来完成,并且A依赖于 阅读全文

posted @ 2018-02-24 11:03 AlanTu 阅读(589) 评论(0) 推荐(0)

深度优先搜索、广度优先搜索

摘要: 深度优先搜索的图文介绍 1. 深度优先搜索介绍 图的深度优先搜索(Depth First Search),和树的先序遍历比较类似。 它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通 阅读全文

posted @ 2018-02-24 11:02 AlanTu 阅读(313) 评论(0) 推荐(0)

图的基本概念

摘要: 图的基本概念 1. 图的定义 定义:图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的;其中,点通常被成为"顶点(vertex)",而点与点之间的连线则被成为"边或弧"(edege)。通常记为,G=(V,E)。 2. 图的种类 根据边是否有方向,将图可以划分为:无向图和 阅读全文

posted @ 2018-02-24 11:00 AlanTu 阅读(671) 评论(0) 推荐(0)

贪心算法

摘要: 贪心算法-霍夫曼编码 霍夫曼编码是一种无损数据压缩算法。在计算机数据处理中,霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期 阅读全文

posted @ 2018-02-24 10:57 AlanTu 阅读(309) 评论(0) 推荐(0)

qsort函数、sort函数

摘要: 先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的。 首先说一下, qsort qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有多个重复值的数组来说,基本快速排序的效率较低,且不稳定)。集成在C语言库函数里面的的qsort函数, 阅读全文

posted @ 2018-02-24 10:55 AlanTu 阅读(382) 评论(0) 推荐(0)

并查集

摘要: 并查集(1)-判断无向图是否存在环 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的元素所在的集合合并。 Find:确定元素属于哪一个子集。它可以被用来确定 阅读全文

posted @ 2018-02-24 10:54 AlanTu 阅读(409) 评论(0) 推荐(0)

prim算法

摘要: 一个连通图的生成树是一个极小的连通子图,它包含图中全部的顶点(n个顶点),但只有n-1条边。 最小生成树:构造连通网的最小代价(最小权值)生成树。 prim算法在严蔚敏树上有解释,但是都是数学语言,很深奥。 最小生成树MST性质:假设N=(V,{E})是一个连通网,U是顶点集V的一个非空子集。若(u 阅读全文

posted @ 2018-02-24 10:53 AlanTu 阅读(29368) 评论(2) 推荐(3)

浅析SkipList跳跃表原理及代码实现

摘要: 本文将总结一种数据结构:跳跃表。前半部分跳跃表性质和操作的介绍直接摘自《让算法的效率跳起来--浅谈“跳跃表”的相关操作及其应用》上海市华东师范大学第二附属中学 魏冉。之后将附上跳跃表的源代码,以及本人对其的了解。难免有错误之处,希望指正,共同进步。谢谢。 跳跃表(Skip List)是1987年才诞 阅读全文

posted @ 2018-02-24 10:49 AlanTu 阅读(683) 评论(0) 推荐(0)

伸展树

摘要: 伸展树 一、简介:伸展树,或者叫自适应查找树,是一种用于保存有序集合的简单高效的数据结构。伸展树实质上是一个二叉查找树。允许查找,插入,删除,删除最小,删除最大,分割,合并等许多操作,这些操作的时间复杂度为O(logN)。由于伸展树可以适应需求序列,因此他们的性能在实际应用中更优秀。伸展树支持所有的 阅读全文

posted @ 2018-02-24 10:47 AlanTu 阅读(1087) 评论(0) 推荐(0)

摊还分析

摘要: 摊还分析 本章内容: 1.聚合分析 2.核算法 3.势能法 4.动态表 一 聚合分析 1. 在摊还分析中,我们求数据结构的一个操作序列中所执行的所有操作的平均时间,来评价操作的代价,它不涉及概率,可以保证最坏情况下每个操作的平均性能。 2. 摊还代价:对所有n,一个n个操作的序列最坏情况下话费时间为 阅读全文

posted @ 2018-02-24 10:45 AlanTu 阅读(455) 评论(0) 推荐(0)

算法集锦(五)

摘要: 求连通图的割点(关节点) 题目:求一个连通图的割点,割点的定义是,如果除去此节点和与其相关的边,图不再连通,描述算法。 分析: 1. 最简单也是最直接的算法是,删除一个点然后判断连通性,如果删除此点,图不再连通,则此点是割点,反之不是割点(图的连通性一般通过深搜来判定,是否能一次搜索完 全部顶点); 阅读全文

posted @ 2018-02-24 10:23 AlanTu 阅读(298) 评论(0) 推荐(0)

P问题、NP问题和NPC问题

摘要: 什么是P问题、NP问题和NPC问题 这或许是众多OIer最大的误区之一。 你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。他们没有搞清楚NP问题和NPC问题的概念。NP问题并不是那种“ 阅读全文

posted @ 2018-02-24 10:19 AlanTu 阅读(8019) 评论(1) 推荐(3)

算法集锦(四)

摘要: 归并排序 归并排序算法实现: #include<stdio.h> #include<stdlib.h> #define FatalError( Str ) fprintf( stderr, "%s\n", Str ), exit( 1 ) typedef int ElementType; void 阅读全文

posted @ 2018-02-24 10:09 AlanTu 阅读(183) 评论(0) 推荐(0)

算法集锦(三)

摘要: 开放定址散列表的实现 #include<stdio.h> #include"fatal.h" typedef char* ElementType; typedef unsigned int Index; typedef Index Position; struct HashTbl; typedef 阅读全文

posted @ 2018-02-24 10:02 AlanTu 阅读(188) 评论(0) 推荐(0)

AVL平衡二叉搜索树原理及各项操作编程实现

摘要: C语言版 #include<stdio.h> #include "fatal.h" struct AvlNode; typedef struct AvlNode *Position; typedef struct AvlNode *AvlTree; typedef int ElementType ; 阅读全文

posted @ 2018-02-24 09:58 AlanTu 阅读(258) 评论(0) 推荐(0)

AVL平衡二叉树

摘要: 查找——平衡二叉树(AVL) 排序二叉树对于我们寻找无序序列中的元素的效率有了大大的提高。查找的最差情况是树的高度。这里就有问题了,将无序数列转化为 二叉排序树的时候,树的结构是非常依赖无序序列的顺序,这样会出现极端的情况。 【如图1】: 这样的一颗二叉排序树就是一颗比较极端的情况。我们在查找时候, 阅读全文

posted @ 2018-02-24 09:56 AlanTu 阅读(171) 评论(0) 推荐(0)

算法集锦(二)

摘要: 二叉查找树(二叉排序树)(C语言) #include<stdio.h> #include "fatal.h" struct TreeNode; typedef struct TreeNode *Position; typedef struct TreeNode *SearchTree; typede 阅读全文

posted @ 2018-02-24 09:54 AlanTu 阅读(165) 评论(0) 推荐(0)

算法集锦(一)

摘要: 最大子序列和 动态规划的算法: 最小公共子序列的和 #include<stdio.h>int MinSubsequenceSum(const int A[],int n){ int i,sum,MinSum; sum=MinSum=0; for(i=0;i<n;i++) { sum+=A[i]; i 阅读全文

posted @ 2018-02-24 09:49 AlanTu 阅读(172) 评论(0) 推荐(0)

选择问题 and 字谜游戏问题

摘要: #include <stdio.h> #include <stdlib.h> // 第一题 // 找出N个数的第k个最大者 // 方法1:排序(冒泡),降序找出第k个值 // 方法2:选前k个点进行降序排序,后面的数进行比较, // 如果数比第k个数小则忽略, 复杂度低于方法1 #define TY 阅读全文

posted @ 2018-02-24 09:45 AlanTu 阅读(371) 评论(0) 推荐(0)

TF-IDF与余弦相似性的应用

摘要: TF-IDF与余弦相似性的应用(一):自动提取关键词 这个标题看上去好像很复杂,其实我要谈的是一个很简单的问题。 有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工干预,请问怎样才能正确做到? 这个问题涉及到数据挖掘、文本处理 阅读全文

posted @ 2018-02-24 09:38 AlanTu 阅读(393) 评论(0) 推荐(0)

一致性哈希算法

摘要: tencent2012 笔试题附加题问题描述: 例如手机朋友网有 n 个服务器,为了方便用户的访问会在服务器上缓存数据,因此用户每次访问的时候最好能保持同一台服务器。已有的做法是根据 ServerIPIndex[QQNUM%n]得到请求的服务器,这种方法很方便将用户分到不同的服务器上去。但是如果一台 阅读全文

posted @ 2018-02-24 09:35 AlanTu 阅读(164) 评论(0) 推荐(0)

Cache缓存

摘要: 闲话Cache:始篇 Caching(缓存)在现代的计算机系统中是一项最古老最基本的技术。它存在于计算机各种硬件和软件系统中,比如各种CPU, 存储系统(IBM ESS, EMC Symmetrix…),数据库,Web服务器,中间件等。它的一个重要的作用就是用于弥补不同速度的硬件之间的存取速度的差距 阅读全文

posted @ 2018-02-24 09:33 AlanTu 阅读(2526) 评论(0) 推荐(0)

布隆过滤器

摘要: 假如有1亿个不重复的正整数(大致范围已知),但是只有1G的内存可用,如何判断该范围内的某个数是否出现在这1亿个数中?最常用的处理办法是利用位图,1*108/1024*1024*8=11.9,也只需要申请12M的内存。但是如果是1亿个邮件地址,如何确定某个邮件地址是否在这1亿个地址中?这个时候可能大家 阅读全文

posted @ 2018-02-24 09:20 AlanTu 阅读(249) 评论(0) 推荐(0)

信号

摘要: 一、什么是信号 用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中的进程捕获到这个信号然后作出一定的操作并最终被终止。 信号是UNIX和Linux系统响应某些条件而产 阅读全文

posted @ 2018-02-24 09:10 AlanTu 阅读(377) 评论(0) 推荐(0)

设置用户ID和设置组ID

摘要: 与一个进程关联的ID有6个或更多,如下图所示: 与每个进程相关联的用户ID和组ID 实际用户ID 实际组ID 有效用户ID 有效组ID 附加组ID 保存的设置用户ID 保存的设置组ID 实际用户ID和实际组ID标识我们究竟是谁,这两个字段在登录时取自口令文件中的登录项。通常,在一个登录会话间这些值并 阅读全文

posted @ 2018-02-24 08:59 AlanTu 阅读(715) 评论(0) 推荐(0)

dup和dup2函数

摘要: 下面两个函数都可用来复制一个现存的文件描述符: #include<unistd.h> int dup(int filedes); int dup2(int filedes,int filedes2); 两函数的返回值:若成功则返回新的文件描述符,若出错则返回-1 由dup返回的新文件描述符一定是当前 阅读全文

posted @ 2018-02-24 08:58 AlanTu 阅读(578) 评论(0) 推荐(0)

Linux进程学习 - 孤儿进程和守护进程

摘要: 孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程。现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程如果一个子进程的父进程先于子进程 结束, 子进程就成为一个孤儿进程,它由 init 进程收养,成为 i 阅读全文

posted @ 2018-02-24 08:55 AlanTu 阅读(465) 评论(0) 推荐(0)

linux可重入、异步信号安全和线程安全

摘要: 一 可重入函数 当一个被捕获的信号被一个进程处理时,进程执行的普通的指令序列会被一个信号处理器暂时地中断。它首先执行该信号处理程序中的指令。如果从信号处理程序返回(例如没有调用exit或longjmp),则继续执行在捕获到信号时进程正在执行的正常指令序列(这和当一个硬件中断发生是所发生的事情相似。) 阅读全文

posted @ 2018-02-24 08:53 AlanTu 阅读(1683) 评论(0) 推荐(0)

标准I/O库

摘要: 前言:我想大家学习C语言接触过的第一个函数应该是printf,但是我们真正理解它了吗?最近看Linux以及网络编程这块,我觉得I/O这块很难理解。以前从来没认识到Unix I/O和C标准库I/O函数压根不是一码事。Unix I/O也叫低级I/O,也叫Unbuffered I/O,是操作系统内核部分, 阅读全文

posted @ 2018-02-24 08:52 AlanTu 阅读(450) 评论(0) 推荐(0)

导航