- 博客(32)
- 资源 (1)
- 收藏
- 关注
转载 STL 堆 heap
堆简介堆并不是STL的组件,但是经常充当着底层实现结构。比如优先级队列(Priority Queue)等等。堆是一种完全二叉树,因此我们可以用数组来存储所有节点。在这里的实现中,采用了一个技巧:将数组中索引为0的元素保留,设置为极大值或者为极小值(依据大顶堆或者小顶堆而定)。那么当某个节点的索引是i时,其左子节点索引为2*i,右子节点索引为2*i+1.父节点是i/2(这里/
2015-08-05 09:32:44
604
转载 信号量解决进程的同步和互斥
转自:http://www.cnblogs.com/whatbeg/p/4435286.html用信号量解决进程的同步与互斥探讨【持续更新】 现代操作系统采用多道程序设计机制,多个进程可以并发执行,CPU在进程之间来回切换,共享某些资源,提高了资源的利用率,但这也使得处理并发执行的多个进程之间的冲突和相互制约关系成为了一道难题。如果对并发进程的调度不当,则可能会出现运行结果与
2015-08-03 10:46:44
9775
转载 关于进程和线程的一个形象的解释
http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html进程与线程的一个简单解释作者: 阮一峰日期: 2013年4月24日进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。最近,我读到一篇材料,发
2015-07-30 11:03:30
453
原创 常用排序算法总结
1.插入排序1)直接插入排序(稳定)代码:void DirectInsertSort(int* arr, int len){ if(NULL==arr || len<=1) return; int keyIndex;//要插入的值下标 for(keyIndex=1;keyIndex<len;++keyIndex) { int key=arr[keyIndex]
2015-07-02 15:21:05
400
原创 leetcode----数字
1.题目Count Primes(计算质数个数)Count the number of prime numbers less than a non-negative number, n.计算小于n的非负数中质数的个数思路:对于每一个数k,检查是否能被2到sqrt(k)整除代码:class Solution {public: int countPrimes(int
2015-06-18 19:37:54
402
原创 Leetcode---线性数据结构(栈,链表,队列)的
1.题目:单链表的逆转(循环和递归)思路:循环:用两个指针p1,p2,p1指向node,p2指向node->next;在将p2->next指向p1前,先将p2->next保存下来。然后将p1,p2依次往后挪动递归:将链表拆分为表头节点和余下链表,将余下链表逆序后,再表头节点链接到逆序后的余下链表中注:对于线性数据结构,比较适合用迭代循环方法,而对于树状数据结构,比如二叉树,递归方法
2015-06-17 18:56:19
492
原创 LeetCode---哈希表(hash table)
1.题目:包含重复(Contains Duplicate 2) Given an array of integers and an integer k, find out whether there there are two distinct indices i and j in the array such that nums[i] = nums[j] and the d
2015-06-17 15:10:04
1477
原创 LeetCode----树
1.题目:Invert Binary Tree/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), righ
2015-06-16 09:35:06
449
原创 Leetcode----处理字符串
1.Roman to Integer(将罗马数字转化为整数) Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 思路:1)罗马数字到整数的转换规则个位数举例I,1 】II,2】 III,3】 IV,4 】V,5
2015-06-15 15:24:05
536
原创 朴素贝叶斯分类
一、朴素贝叶斯分类原理看了两篇介绍很详细的博文http://blog.youkuaiyun.com/pkueecser/article/details/8184299,http://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html以下是综合精简的笔记。1.核心思想:选择高概率对应的类别2.
2015-06-08 19:33:08
825
原创 决策树
一、.决策树原理我是看参考博文http://blog.youkuaiyun.com/suipingsp/article/details/41927247,http://www.cnblogs.com/bourneli/archive/2013/03/15/2961568.html然后总结的笔记。1.分类原理决策树分类器就像判断模块和终止块组成的流程图,终止块表示分类结果(也就是树的叶子
2015-06-03 20:57:34
1688
原创 算法导论 10.4-3 输出二叉树的每个结点的关键字
问题:给定一个n个结点的二叉树,写出一个O(n)时间的非递归过程,将该树的每个结点的关键字输出。可以使用一个栈作为辅助数据结构。思路:利用栈依次将各个结点压入栈中,输出其值后再弹出。代码:#include#include using namespace std;struct Node{ int key; Node *left; Node *right; Node(
2015-05-31 19:40:49
2027
原创 算法导论--10.3-4 多数组表示双向链表(紧凑)
问题:双向链表的所有m个元素在存储器中保持紧凑,即在多数组表示中占用前m个下标思路:分配内存: 总是分配相邻的存储位置; 释放内存:若删除链表中的一个元素,导致存储位置中间空了一个,让数组的最后一个元素补上,并修改其prev和next值代码:#include#include using namespace std;int n=15, f=-1, head=-1;/
2015-05-31 16:02:16
958
原创 算法导论 10.2-7 单链表的逆转
问题: 给出一个时间的非递归过程,实现对一个含n个元素的单链表的逆转思路:逆转即把结点的next指针指向前一个结点,在做逆转的时候要先储存下之前的next指向的值。 逆转后的表头为之前单链表的最后一个元素。代码:#includeusing namespace std;//先实现一个单链表(为了强化对链表的理解)struct Node{ Node
2015-05-31 14:33:01
926
转载 c++基本数据结构的类的用法--栈,队列,链表
1.stack类转自:http://www.169it.com/article/2839007600903800247.htmlc++ stl栈stack介绍C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。c++ stl栈stack的头文件为: #include c++ stl栈s
2015-05-28 16:41:05
1686
转载 c++ 异常处理
转自:http://www.cnblogs.com/ggjucheng/archive/2011/12/18/2292089.htmlC++异常处理引言异常,让一个函数可以在发现自己无法处理的错误时抛出一个异常,希望它的调用者可以直接或者间接处理这个问题。而传统错误处理技术,检查到一个局部无法处理的问题时:1.终止程序(例如atol,atoi,输入NULL,会产生段错误
2015-05-28 15:14:39
329
原创 算法导论 用两个队列实现一个栈 10.1-7
问题:用两个队列实现一个栈思路:队列是先进先出,栈是后进先出。将Q.tail当成S.top,则出栈和队列的删除相同。入栈,要通过一个空的队列L1和另一个存有之前值的队列L2,设值x要存入栈中,则先将x存入空的队列L1中,再依次将L2的值取出加入到L1中。代码:
2015-05-27 14:18:04
467
转载 c++ 初始化列表
转自:作者:zdd出处:http://www.cnblogs.com/graphics/C++ 初始化列表何谓初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。在C++中,struct和class的唯一区别是默认的访问性不同,而这里我们不考虑访问性的问题,所以下面的
2015-05-26 15:54:22
418
原创 算法导论 最坏情况为线性时间的选择算法 9.3-8 9.3-9
1.最坏情况为线性时间的选择算法代码:#include#includeusing namespace std;//1.把n个元素按每组k个元素划分为upfloor(n/k)组(k>3),最后一组元素个数可能小于k个//2.利用插入排序InsertSort找到每组中的中位数//3.递归调用Select从步骤2中找到的中位数组中找出其中位数int Select(int * A
2015-05-25 20:27:31
1830
转载 c++ 取随机数
转自:http://www.cnblogs.com/kaituorensheng/archive/2013/03/05/2944008.htmlC/C++产生随机数C/C++产生随机数用到两个函数rand() 和 srand()一. 不指定范围产生随机数 用到函数rand(),函数原型为int rand(),无参数。此时会产生一个介于0~RAND_M
2015-05-23 15:21:35
1728
转载 c++ vector 用法
转自:http://www.cnblogs.com/wang7/archive/2012/04/27/2474138.html在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。1 基本操作(1)头文件#include.(2)创建vector对象,vector vec;(3)尾部插入数字:vec.push_back(a);(4)使
2015-05-23 15:15:11
420
原创 算法导论8-4
问题:n个红色水壶和n个蓝色水壶,相同颜色水壶可盛的水都不一样多,但每一个红色水壶都有一个对应的蓝色水壶,二者可盛的水一样多。不同颜色的水壶可以互相比较判断可盛的水是否一样多。但是相同颜色的水壶不能相互比较。设计一个随机算法,其期望的比较次数为O(nlgn).思路:红色水壶和蓝色水壶比较,可在找到与其容量一样多的蓝色水壶的同时将剩下的蓝色水壶分为两组:容量比它大的和容量比它小的;
2015-05-22 20:09:09
855
原创 k邻近算法(kNN)
类别:监督学习---分类原理:对未知类别属性的数据集中的每个点依次执行以下操作def classify0(inX, dataSet, labels, k): #1)计算已知类别数据集中的点与当前点之间的距离 dataSetSize=dataSet.shape[0]; testData=tile(inX,[dataSetSize,1]) diff=(testD
2015-05-17 21:53:36
844
原创 算法导论 基数排序 习题8.3-4
问题: 在O(n)时间内,对0到n^3-1区间内的n个整数进行排序思路:线性时间,考虑使用基数排序,基数排序时间为,要使时间为O(n),,即k=n, 即把每个整数写成3位n进制数代码:
2015-05-17 19:08:10
987
转载 算法导论 改进快排(3)---栈深度 习题7-4
问题:快排算法包含了两个对自身的递归调用,每次递归调用的信息存入栈中,操作系统给程序的栈空间是有限的,如果数组很大的话,则很容易造成栈溢出,这样程序就崩 溃了。思路:QUICKSORT中的第二个递归用一个循环控制结构来代替---尾递归代码实现尾递归:#include#include#includeusing namespace std;//交换两个数(不用中间
2015-05-17 14:44:36
650
原创 算法导论 改进快排(2)----针对相同元素值 7.2
问题:序列中有较多相同元素值时,随机化快排的性能下降思路:PARTION将序列分为三个部分A(p,q,t,r),A[p,...,q-1]中元素都小于A[q],A[q,...,t]中元素都相等,A[t+1,...,r]中元素都大于A[q]。QUICKSORT只对分区内互不相同的元素才做递 归。代码:
2015-05-16 16:23:31
638
原创 算法导论 改进快排(1)----几乎有序的序列 7.4-5
问题:当输入数据已经“几乎有序”时,插入排序性能比快速排列好。为了提高快排苏旭,当对一个长度小于k的字数组调用快排时,让它不做任何排序就返回。当上层的快速排序调用返回时,对整个数组运行插入排序来完成排序过程。证明这一排序算法的期望时间复杂度为O(nk+nlg(n/k))证明:严格的证明 http://m.blog.youkuaiyun.com/blog/leolinsheng/8915864, 我看了觉得
2015-05-15 14:50:15
2645
转载 快排的优化
转自http://bbs.chinaunix.net/thread-1073067-1-1.html看快排的时候对其性能也有所质疑,看到这篇文章不错,所以转来分享。快速排序算法是一种基于分治技术的重要的排序算法,自从它被发明以来,就受到了研究人员的广泛注意。多年以来,人们对这个基本算法进行了大量的改良。我搜集并查阅了一些相关的资料,在下文中对这些改进做出一些介绍。一、基本的
2015-05-15 14:34:12
686
原创 股票什么时候买进什么时候卖出收益最大----求最大子数组(算法导论第四章 4.1-3)
问题描述:某公司股票,给出n天内的股票价格,判断什么时候买入股票,什么时候卖出股票收益最大 天01234价格10117106变化 1-43-4问题转换: 将变化
2015-05-05 15:13:12
3749
原创 算法导论第二章2-4 逆序对(c++)
问题描述:给出一个确定在n个元素的任何排列中逆序对数量的算法,最坏情况需要 c*nlgn时间(提示,修改归并排序)思路: 看到lgn,想到用分治法。分治法的三个步骤——分解,解决,合并。最关键想清楚合并如何进行。合并:在归并排序中合并时,左边序列第一个值若大于右边序列第一个值,则左边序列所有值与右边序列第一个值都构成逆序对。#includeusing namespace std;
2015-04-20 16:55:12
1151
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人