- 博客(67)
- 收藏
- 关注
原创 1160 蛇形矩阵
题目描述 Description 小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和. 算法思想:设为n*n的矩阵,我们设置四个边界,up,down,left,right.最中心的数的下标为n/2,n/2;初始时,我们设置边界right=do
2016-03-31 17:38:18 747
原创 最长递增子序列求解
算法难,难于上青天!!!!! 搞懂一个算法不容易,还是写篇博客为以后复习做好准备!!!! 动态规划算法O(n^2)设A[i]表示序列中第i个数,dp[i]表示从0到i这一段中以i结尾的最长上升子序列的长度,初始化dp[i]=1;(i=0,1,2…(len(A)-1).则有动态方程为: dp[i]=max{dp[i],dp[j]+1}(j=0,1,2,….i-1,且A[j] < A[i]);
2016-03-30 16:29:38 710 1
原创 动态规划之矩阵连乘
矩阵连乘问题—–动态规划算法思想:给定n个矩阵{A1,A2,……..An},相连的两个矩阵满足矩阵连成的的条件,计算矩阵连乘乘积的计算次序,使得依此次序计算矩阵连乘需要的数乘的次数最少. 找出最优解的性质,刻画其特征结构 对于矩阵连乘问题,最优解就是找到一种计算顺序,使得计算次数最少. 设m[i][j]为从第i个矩阵到第j个矩阵相乘的最优解(记为A[i:j). 假设这个最优解是从第k
2016-03-28 23:16:43 741
原创 常用的服务器模型总结
I/O模型同步I/O阻塞I/O,I/O复用,和信号驱动I/O 都是同步I/O模型. 这种I/O的读写操作,都是在I/O事件发生之后,由应用程序来完成.同步I/O模型要求用户代码自行执行I/O操作,将数据从内核缓冲区读入用户缓冲区,或将数据从用户缓冲区写入内核缓冲区. 异步I/O异步I/O机制则由内核来执行I/O操作,数据在内核缓冲区和用户缓冲区之间的移动是由内核在’后台完成的’ *也
2016-03-28 21:29:20 2690
原创 1083 Cantor表
题目描述 Description现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … … 我们以Z字形给上表的每一项编号。第一项是1/1,然后是1/2,2/1,3/1,2/2,… 算
2016-03-23 07:44:10 1113
原创 socket 地址常用的API总结
主机字节序和网络字节序大端:(高低低高)高位字节存储在内存地址的低地址处,低位存储在内存地址的高地址处. 小端:(高高低低)高位字节存储在内存的高地址处,低位存储在内存地址的低地址处。 即使是同一台机器上的两个进程(比如一个由c语言编写,另一个由java编写)通信,也要考虑字节序的问题(java 虚拟机采用大端字节序); accept只是从监听队列中取出连接,而不论连接处于何种变化,
2016-03-22 16:36:33 876
原创 求两个有序数组的中位数
问题描述有两个排序的数组,长度都为n,求合并后的排序数组的中位数. 直接遍历法,时间复杂度为O(n)算法思想: 因为两个数组的长度都为n,那么合并后的中位数一定有两个,那么,我们只要在两个数组合并后的数组中找到找到第n个和第n-1个元素加起来除2就能得到其中位数。 (当然,我们不会真正的去合并两个数组). #include<iostream>#include<iomanip>using
2016-03-21 20:16:39 544
原创 递归归并排序和非递归归并排序(自然分组)
递归合并排序算法思想:将待排序的集合一分为二,直到排序集合就剩下一个元素为止,然后不断的合并两个排好序的数组。 #include<iostream>#include<cstdlib>#include<random>#include<sys/timeb.h>#include<ctime>#define N 200000using namespace std;int merge(int
2016-03-21 19:02:48 2233
原创 Http协议学习笔记
IP头部的源端IP地址和目的端的IP地址在转发过程中是始终不变的(源路由选择除外),但是帧头部的源端地址和目的端物理地址在转发中是一直变化的. 短连接当处理完客户的一个HTTP请求之后,web服务器就主动将TCP连接关闭,也就是说,同一个客户端的多个连续的HTTP请求不能共用同一个TCP连接,这称为短连接. 长连接是指同一个客户端的的多个连续的请求使用同一个TCP连接:优点:它极大地减少了
2016-03-20 15:15:50 713
原创 TCP协议详解---学习笔记
TCP 服务的特点面向连接,字节流和可靠传输. 通信双方必须建立连接,必须分配必要的内核资源 全双工即双方的数据读写可以通过一个连接来实现,完成数据交换之后,通信双方都必须断开连接释放系统资源. 应用程序执行多次写操作作时,TCP模块先将这些数据放入TCP发送缓存区中,当TCP模块真正开始发送数据时,发送缓冲区中的这些等待的数据可能被封住成一个或多个TCP报文段发出,因此,TCP模
2016-03-19 22:25:58 2395
原创 TCP/IP学习笔记(1)
1.概述TCP/IP协议族是一个四层协议系统,自底而上分别是数据链路层、网络层、传输层、应用层.如下图: 数据链路层数据链路层实现了网卡接口的网络驱动程序.网络层通过IP地址寻找一台主机,而数据链路层通过物理地址寻找一台机器.ARP协议主要把IP地址转换为其物理地址. RARP协议仅用于网络上某些无盘工作站,因为缺乏存储设备,无盘工作站无法记住自己的IP地址,但他
2016-03-14 18:43:06 1025
原创 man 命令的使用,linux根分区详解!
1.man 命令的使用 man命令如何使用呢,当我们在编写程序时,要用到一个函数,却不知道参数的个数,顺序,头文件等信息,这是man命令强大的功能就可以帮助你解决这个问题,比如,你要知道lseek函数的原型和所属头文件,就可以在终端输入man lseek;如果你要查看的函数名既是linux 命令,又是系统调用,比如说mkdir,也就是说mkdir既能在终端里执行,又能系统调用,这是我们可以通
2016-03-14 10:08:23 1303
原创 chmod()函数和fchmod()函数,open()函数和creat()函数,close()函数,umask命令
1.chmod 函数和fchmod函数chmod和fchmod函数包含在头文件<sys/types.h>和中 原型;int chmod(const char *path,mode_t mode); int fchmod(int fildes,mode_t mode); 区别:chmod函数第一个参数是文件名,fchmod以文件描述符作为第一个参数;参数:第一个参数path是要设置权
2016-03-14 10:06:45 1608
原创 read()函数,write()函数,lseek()函数
1.read()函数read()函数包含在头文件<unistd.h>中, 原型:ssize_t read(int fd,void *buf,size_t count); 函数参数的含义:从文件描述符fd所指的文件中读取count个字节的数据到buf所指向的缓冲区,count为0,不读数据,返回0,返回值就是实际读取的字节数,如果read()顺利返回实际读到的字节数,和参数count比较,若
2016-03-14 10:06:08 7962
原创 dup,dup2,fcntl,ioctl,系统调用
1.dup()函数和dup2函数dup()和dup2()函 数包含在头文件中 原型:int dup(int oldfd); int dup2(int oldfd,int newfd); dup用来复制参数oldfd所指的文件描述符,返回最小的尚未被使用的文件描述符,错误返回-1;返回的新文件描述符和参数oldfd指向同一个文件,共享所有的锁定,读写指针等各项权限或标志位;如果用lsee
2016-03-14 10:05:32 653
原创 文件属性之stat(),fstat(),lstat(),chown(),fchown(),lchown()函数
1.stat(),fstat(),lstat()函数这三个函数包含在头文件<sys/types.h>中 原型:int stat(const char *file_name,struct stat *buf); int fstat(int filedes,struct stat *buf); int lstat(const char *file_name,struct stat *
2016-03-14 10:04:44 248
原创 rename(),unlink(),getcwd(),chdir(),opendir(),readdir(),closedir()函数
1.rename(),unlink(),remove()函数#include 原型:int rename(const char *oldpath,const char *newpath); rename会将参数oldpath所指定的文件名改为参数newpath所指定的文件名,若newpath存在,则原文件会被删除;函数执行成功返回0,错误返回-1;#include
2016-03-14 10:04:09 1069
原创 getpwuid()函数,getpgrgid()函数()
1.getpwuid()函数通过用户uid查找用户的相关信息,并以passwd的结构体返回其数据. 头文件:#include #include 函数原型:struct passwd *getpwuid(uid_t uid); 参数 文件所有者的uid; 返回值:成功passwd 结构体,uid所对应的用户信息,错误返回空指针, struct passwd { ch
2016-03-14 10:03:39 5052
原创 fork() 函数,vfork()函数
1.fork()函数头文件:#include #include 函数原型:pid_t fork(void) fork函数它有两个返回值,调用一次返回两次,成功调用返回两次,成功调用后fork后,当前进程已经分裂为两个进程,一个是原来的父进程,另一个是刚刚创建的子进程,父进程fork后返回刚刚创建的子进程的ID,另一个是子进程中,fork的返回值,返回0, 如果fork失败返回-1
2016-03-14 10:03:12 499
原创 守护进程的创建
1.守护进程的概念守护进程是指在后台运行的,没有控制终端与之相连的进程,它独立于控制终端,周期性的执行某种任务.2.守护进程的启动在linux系统启动时从启动脚本/etc/rc.d中启动.可以由作业规划进程crond 启动.可以由用户终端(通常是shell)执行;3.守护进程创建的要点让进程在后台执行,方法是fork一个子进程,然后使得父进程
2016-03-14 10:02:38 465
原创 标准的I/O缓冲:全缓冲,行缓冲,无缓冲
今天在学习进程时遇到关于一个I/O缓冲区的的问题,和大家分享一下,首先举个简单的例子:#include int main() { printf("hello,world!"); _Exit(0);}编译成功后却
2016-03-14 10:02:09 1902
原创 wait()函数,waitpid()函数
1.wait() 函数,waitpid函数()头文件:#include #include 函数原型:pid_t wait(int *statloc); pid_t waitpid(pid_t pid,int *statloc,int options); 函数说明:wait函数使父进程暂停执行,直到它的一个子进程结束为止,该函数的返回值是终止运行的子进程的PID.参数stat
2016-03-14 10:01:40 2599
原创 setuid()函数,setgid()函数,getpriority()函数,setpriority()函数,nice()函数
1.setuid()函数,setgid() 函数,头文件:#include #include 函数原型:int setuid(uid_t uid); int setgid(gid_t gid); 函数说明:若进程具有root 权限, 则函数 将实际用户的ID(组), 有效用户的ID(组),都设置为参数uid; 若进程不具有root权限,但uid等于 实际用户 ID(组), 则 se
2016-03-14 10:01:09 2633
原创 顺序栈,链栈,多栈运算
1.栈1.栈的定义:栈作为一种限定性的线性表,是将线性表的插入和删除运算限制为仅在表的一端进行,通常将表中允许进行插入.删除操作的一端称为栈顶,因此栈顶的当前位置是动态变化的,它是由一个称为栈顶指针的位置指示器指示,同时标的另一端称为栈底,当栈中没有元素时称为空栈,栈的插入操作被形象的称为进栈或入栈. ADT stack 数据元素:可以是任意类型的数据,但必须属于同一个数据对象. 结论关系
2016-03-14 10:00:42 680
原创 线程创建函数pthread_create
头文件:#include b函数原型:int pthread_created(pthread_t *thread,pthread_attr_t *attr,void * (*start_routine)(void *),void *arg); 函数参数含义: thread:该参数是一个指针,当线程创建成功时,用来返回创建的线程的ID. attr:该参数用于指定线程的属性,NULL表示默认属性.
2016-03-14 10:00:03 1504
原创 线程属性_实时调度
1.pthread_attr_init(pthread_attr_t attr)和pthread_attr_destroy(pthread_attr_t attr)函数.pthread_attr_setdetachstate(pthread_attr_t attr,int detachstate);pthread_attr_setdetachstate(pthread_attr_t attr,
2016-03-14 09:58:32 544
原创 linux 线程属性函数总结
1、初始化一个线程对象的属性 int pthread_attr_init(pthread_attr_t *attr); 返回值:若是成功返回0,否则返回错误的编号 形 参: attr 指向一个线程属性的指针 说 明:Posix线程中的线程属性pthread_attr_t主要包括scope属性、detach属性、堆栈地址、堆栈大小、优先级。 pthread_attr_init实现时为属性对象
2016-03-13 09:13:22 490
原创 线程的终止和私有数据
linux下线程的终止有有两种方式:1.通过return从线程函数返回. 2.通过掉用 pthread_exit()使线程退出,pthread_exit在头文件 pthread.h中申明. 函数原型:void pthread_exit(void * retval); 注意,有两种特殊的情况,第一种情况是,在主线程中,如果从main函数返回 或是调用了exit()函数退出主线程,则整个进程都
2016-03-13 09:10:35 440
原创 互斥锁和条件变量
为了允许在线程或进程之间共享数据,同步是必须的,互斥锁和条件变量是同步的基本组成部分.1.互斥锁互斥锁是用来保护临界区资源,实际上保护的是临界区中被操纵的数据,互斥锁通常用于保护由多个线程或进程分享的共享数据,一般是一些可供线程间使用的全局变量,来达到线程同步的目的,保证任何时刻只有一个线程或进程在执行其中的代码,互斥锁的函数:1.pthread_mutex_ini
2016-03-13 09:09:49 518
原创 出错处理
1.错误检查函数执行失败时,一般都会返回一个特定的值比如-1,空指针,这些只能说明有错误发生,但具体的错误原因却没有说明,在头文件erron.h中定义变量errno(错误码),可以通过错误码,得到错误的描述信息. 程序开始执行时,errno被初始化为0,很多库函数在执行过程中遇到错误时将errno设置为相应的错误码,函数被调用成功时,它们不修改errno的值,所以不能根据errno的值来判
2016-03-13 09:09:17 1275
原创 网络模型与协议
1.概述为了减少协议设计的复杂性,大多数网络模型都是按层的方式来组织的,在分层网咯模型中,每一层都为上一层提供一定的服务,而把如何实现本层服务的细节对上一层加以屏蔽,上层只需知道下层提供了什么功能以及对应于这些功能的接口,而不必关心下一层如何实现这些功能,我的理解是:对于上一层来说,本层就像是一个黑匣子,你并不知道里面装的是什么,怎么设计的,但是,只要我知道它的接口,我却会用它. 当前最普
2016-03-13 09:08:37 556
原创 套接字地址结构及其创建
1.套接字的地址结构结构struct sockaddr定义了一种通用的套接字地址, 它在头文件linux/socket 中定义: struct socketsddr{ unsigned short sa_family; //地址类型,AF_xxx char sa_data[14]; // 14字
2016-03-13 09:08:00 624
原创 TCP套接字的数据传输
1.发送数据函数send用来在TCP套接字上发送数据. #include #include 函数原型:ssize_t send(int sockfd,const void *msg,size_t len,int flags); 函数send只能对处于连接状态的套接字使用, 参数sockfd为已经建立好连接的套接字描述符,即accept函数的返回值,参数msg指向存放待发送数据的缓
2016-03-13 09:07:27 2258
原创 UDP套接字的数据传输.套接字的关闭
1.发送数据#include #include ssize_t sendto(int s,const void *msg,size_t len ,int flags,const struct sockaddr *to,socklen_t tolen); 函数sendto的功能与参数send类似,但函数sendto不需要套接字处于连接状态,所以该函数通常用来发送UDP数据,
2016-03-13 09:06:44 2768
原创 系统调用函数
1.字节顺序和转换函数先来了解一个概念:大端模式和小端模式 大端模式是指高字节数据存放在低地址处,低字节数据存放在高地址处. 小端模式是指低字节数据放在内存的内存低地址处,高字节数据存放在内存的高地址处. 在网络上传输数据时,由于数据传输的两端可能对应不同的硬件平台,采用的存储字节的顺序也可能不一致,因此TCP/IP协议规定了在网络上必须采用网络字节顺序(大端模式),对于char 型数
2016-03-13 09:05:20 463
原创 getsockopt()函数和setsockopt()函数
1.套接字创建以后,就可以利用它来传输数据, 但有时可能对套接字的工作方式有特殊要求,此时就需要修改套接字的属性; #include #include 函数原型:int getsockopt(int s,int level,int optname,void *optval,socklen_t *optlen); int setsockopt(int s,int level,int optnam
2016-03-13 09:04:17 1624
原创 TCP文件传送
这几天看网络方面的东西,写了一个简单的文件传送的serve/client 的demo;能实现简单的文件传送. 用一个while循环来遍历整个文本文件,每次读到的数据,发送到客户端,在客户端,打开一个文件,每次读到数据后,写入文件,知道服务器端读到的数据长度小于其预定长度,则说明文件已经读完。#include #include #include #include #include #i
2016-03-13 09:03:47 487
原创 struct hostent结构体
hostent是host entry的缩写,该结构体记录主机的信息,包括主机名,别名,地址类型,地址长度和地址列表。之所以主机的地址是一个列表的形式,原因是当一个主机有多个网络接口时,自然有多个地址。 hostent的定义如下: struct hostent { char *h_name; 地址的正式名字 char **h_aliases; 空字节,
2016-03-13 09:02:45 904
原创 《平凡的世界》读后感
说实话,我并不是一个非常喜欢看小说的人,甚至于不算一个读书爱好者.但是,对于平凡的世界这本书,我却感到有千言万语想表达. 我想大多数读过这本书的人都应该有同样的感受.但由于语言贫乏而退却或者没有与读者分享自己感想的强烈愿望而没有在此留下自己的语言.不管怎样,我们应该庆幸的是我们曾经读过这本书! 也许我真的应该庆幸.如果不是老师今年暑假要求我们读这本书,我想我也许会失去人生当中一笔宝贵的财富.的确,
2016-03-13 09:02:09 1988
原创 匆匆时光,我不负
转眼间大学的生活已经过去了一年多,这一年来,尤其是这学期来,想过每周要写两篇博客,要看几本书,可最终付诸于实践的又有什么呢,可是,我感觉自己每天都是在忙碌中度过的啊,也许,在互联网这个领域努力的人太多,而我的努力还不够,但是,既然我选择了这条路,我就会一直走下去,我会用我的勇气和毅力来战斗,毕竟,我还年轻,而年轻就是资本。即使,这个世界有很多人拿年轻当做挥霍的资本。 10月份,在
2016-03-13 09:00:53 686
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人