2 戴磊freecls

尚未进行身份认证

我要认证

个人技术笔记站 - http://www.daileinote.com

等级
TA的排名 10w+

linux c解析命令行选项getopt、optarg、optind、opterr、optopt

原文地址http://daileinote.com/computer/c_base/14一个典型的 unix 命令行有着如下的形式。command [options] arguments选项的形式为连字符 (-) 紧跟着一个唯一的字符用来标识该选项,以及一个针对该选项的可选参数。带有一个参数的选项能够以可选的方式在参数和选项之间用空格分开。多个选项可以在一个单独的连字符后归组...

2019-12-24 19:01:33

linux c可变参数va_start、va_end、va_arg、va_list

原文地址http://daileinote.com/computer/c_base/13va_start、va_end、va_arg、va_list 其实是宏定义,在不定参数函数中会用到。在解释上面几个之前,我们先来做几件事。确定栈增长方向#include <stdio.h>#include <stdlib.h>#include <uni...

2019-12-24 18:59:49

最长公共子序列

原文地址http://www.daileinote.com/computer/math/0e最长公共子序列(Longest Common Subsequence)(LCS)是一个在一个序列集合中(通常为两个序列)用来查找所有序列中最长子序列的问题这与查找 最长公共子串 的问题不同的地方是:子序列不需要在原序列中占用连续的位置 。最长公共子序列问题是一个经典的计算机科学问题,也是数据比...

2019-12-23 20:08:33

最小路径开销

原文地址http://www.daileinote.com/computer/math/0f最小开销路径(Min Cost Path)(MCP),给出一个开销矩阵cost,求得从cost[x][y] 到 cost[i][j] 的最小开销。比如下图从 (0,0) 到 (2,2) 的最小开销为 8 (1 + 2 + 2 + 3)想要到达 (m, n),必须经过 (m-1, n-1...

2019-12-23 20:07:46

硬币改变

原文地址http://www.daileinote.com/computer/math/10硬币改变(Coin Change)其实是动态规划里的组合问题,给出一个数 N ,在可选的数组S里 {s1,s2,s3...},有多少种组合的方式,使得它们的和等于 NN = 4S = {1,2,3}4种解决方案 {1,1,1,1},{1,1,2},{2,2},{1,3}N = 10S ...

2019-12-23 20:07:03

贪心算法

原文地址http://www.daileinote.com/computer/math/40贪心算法(Greedy Algorithm),是一种在每一步选择中都采取在当前状态下最好或最优的选择,即做出局部最优选择,寄希望这样的选择能导致全局最优解贪心算法不保证得到最优解,但是对很多问题确实可以得到最优解贪心算法比动态规划简单很多,所以能用贪心算法解决的事,不该使用动态规划去解决一...

2019-12-23 20:06:08

活动选择问题

原文地址http://www.daileinote.com/computer/math/41活动选择问题(Activity Selection problem)是一个典型的问题可以通过贪心算法解决,问题描述如下假设一个明星今天需要参加n个活动,每个活动都有开始时间和结束时间,请给出一个安排,使得该明星今天能参加最多的活动数解决步骤如下:1.通过结束时间从小到大排序2.在已经排...

2019-12-23 20:05:22

最小生成树

原文地址http://www.daileinote.com/computer/math/42给定一个连接的无向图(undirected graph),一个图的生成树是指所有顶点连接在一起的子图。一个图可能有多个生成树最小生成树(Minimum Spanning Tree)或者最小权重生成树是指一个有权重的连接的无向图,所有边的权重和小于或者等于所有其他的生成树。最小生成树有 V-1 ...

2019-12-23 20:04:39

哈夫曼编码

原文地址http://www.daileinote.com/computer/math/43霍夫曼编码(Huffman Coding)又译为哈夫曼编码、赫夫曼编码,是一种用于无损数据压缩的熵编码(权编码)算法。由美国计算机科学家大卫·霍夫曼(David Albert Huffman)在1952年发明霍夫曼树常处理符号编写工作。根据整组数据中符号出现的频率高低,决定如何给符号编码。如果符号...

2019-12-23 20:02:58

最长上升子序列

原文地址http://www.daileinote.com/computer/math/0d​​​​​​​最长上升子序列(Longest Increasing Subsequence),简称LIS,即在一个给定的数值序列中,找到一个子序列,使得这个子序列元素的数值依次递增,并且这个子序列的长度尽可能地大。最长递增子序列中的元素在原序列中不一定是连续的,比如{0, 8, 4, 1...

2019-12-21 17:41:03

排序算法总结

原文地址:http://www.daileinote.com/computer/math/0a术语记录:稳定(Stability)- 如果一个排序算法是得一个对象排序后,相同 key 的元素顺序不变,则我们称此排序算法是稳定的基于比较排序算法(comparison based sorting algorithms)- 该排序算法需要有元素之间的比较原位置排序(Sortin...

2019-12-19 19:51:47

搜索算法

原文地址http://www.daileinote.com/computer/math/09搜索算法主要有:线性搜索(linear search) 二分查找(binary search) 跳跃搜索(jump search) 插值搜索(interpolation search) 指数搜索-指数二分搜索(exponential search) 三分搜索(ternary search...

2019-12-18 19:41:47

linux文件io(open read write close)

原文地址http://daileinote.com/computer/linux_sys/03所有执行io操作的系统调用都是以文件描述符(大于0的整数)来指代打开的文件。文件描述符可以表示诸如管道(pipe)、fifo、socket、终端、设备和普通文件。对于每个进程,文件描述符都自成一套。下图的3个文件描述默认都会打开(可以说都是继承自shell文件描述符的一个副本)程序中可以用0...

2018-05-22 10:33:07

linux进程

原文地址http://daileinote.com/computer/linux_sys/04进程是一个可执行程序的实例。程序包含了一系列信息,这些信息描述了如何在运行时创建一个进程,所包含的内容如下。1.二进制格式标识,linux上用的是elf格式2.机器语言指令3.程序入口地址4.数据5.符号表和重定位表6.共享库和动态链接信息7.其他信息一个程序可以创建出很多进程,换句话...

2018-05-22 10:31:46

linux动态内存分配-详解

进程可以通过增加堆的大小来分配内存,堆就是一段长度可变的连续的虚拟内存,开始于未初始化数据段末尾,随着内存的分配和释放增减。通常堆的当前内存边界称为program break。最初,program break正好位于未出华数据段末尾之后(&end位置)。当program break位置上升后,程序可以访问新分配的任何内存地址,而此时物理内存尚未分配,内核会在进程试图首次访问...

2018-05-22 10:29:35

linux c时间

原文地址http://daileinote.com/computer/linux_sys/08日历时间#include <sys/time.h>struct timeval{ time_t tv_sec; /*自1970-01-01 00:00:00到现在的秒数*/ suseconds_t tv_usec; /*额外的微妙数*/};int...

2018-05-21 22:16:48

linux进程凭证(权限)

原文地址http://daileinote.com/computer/linux_sys/07每个进程都有一套用数字表示的用户id和组id,这些id决定了进程执行时具体的权限。实际用户id和实际组id这2个id决定了进程所属的用户和组。假设我们用root用户登录,那么我们在shell中创建的新进程都会从父进程shell中继承这些id。有效用户id和有效组id进程将结合有效用户id...

2018-05-21 22:05:29

linux用户和组

原文地址http://daileinote.com/computer/linux_sys/06linux上每个用户都拥有一个唯一的用户名和一个相对应的用户id(uid),用户可以隶属于一个或多个组。每个组也拥有一个唯一的组名和组id(gid)。用户和组主要是用来控制资源访问权限的。记录用户相关信息的文件:/etc/passwd每个用户都会在此文件里有一条记录,每条记录包含7个字段。...

2018-05-21 22:04:25

linux系统调用及错误处理

原文地址http://daileinote.com/computer/linux_sys/02系统调用是内核提供给外部程序的接口,进程可以通过系统调用来一自己的名义来执行某些动作。在深入了解系统调用之前,先关注以下几点。1.系统调用处理器会从用户态切换到核心态以便能访问到内存核心空间。2.系统调用的组成是固定的,每个系统调用都有一个唯一的数字来标识,而程序只是通过名称来调用。从编程角度来...

2018-05-18 21:52:16

linux内核简介

原文地址http://daileinote.com/computer/linux_sys/01内核是用来管理和分配计算机资源的,它主要有进程调度、内存管理、提供文件系统、创建和终止进程、对设备的访问、联网、提供系统调用的接口等。内核还可以为内阁用户模拟出抽象的虚拟私有计算机,每个用户都可以登录进系统独立操作,与其他用户大致无干。内核态和用户态现代处理器一般都允许cpu至少在2种不同的状态...

2018-05-18 21:50:48

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。