上一页 1 ··· 8 9 10 11 12 13 14 15 16 下一页

2014年2月14日

白话快速排序

摘要: 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速排序,快速搞定。快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。该方法的基本思想是:1.先从数 阅读全文

posted @ 2014-02-14 21:24 berkeleysong 阅读(108) 评论(0) 推荐(0) 编辑

openMP的一点使用经验

摘要: 最近在看多核编程。简单来说,由于现在电脑CPU一般都有两个核,4核与8核的CPU也逐渐走入了寻常百姓家,传统的单线程编程方式难以发挥多核CPU的强大功能,于是多核编程应运而生。按照我的理解,多核编程可以认为是对多线程编程做了一定程度的抽象,提供一些简单的API,使得用户不必花费太多精力来了解多线程的底层知识,从而提高编程效率。这两天关注的多核编程的工具包括openMP和TBB。按照目前网上的讨论,TBB风头要盖过openMP,比如openCV过去是使用openMP的,但从2.3版本开始抛弃openMP,转向TBB。但我试下来,TBB还是比较复杂的,相比之下,openMP则非常容易上手。因为精力 阅读全文

posted @ 2014-02-14 16:52 berkeleysong 阅读(139) 评论(0) 推荐(0) 编辑

2014年2月13日

时间复杂度 与 空间复杂度

摘要: 算法的时间复杂度和空间复杂度合称为算法的复杂度。1.时间复杂度(1)时间频度一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。(2)时间复杂度在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但有时我们想知道它变化时呈现什么规律。为此,我们引入时间复杂度概念。 一般情况下, 阅读全文

posted @ 2014-02-13 14:32 berkeleysong 阅读(116) 评论(0) 推荐(0) 编辑

2014年2月12日

线程同步之互斥锁函数

摘要: 前文介绍了互斥锁同步的两种方法:atomic和critical,本章介绍OpenMP提供的互斥锁函数。互斥锁函数类似于Windows、Linux下的mutex。1. 互斥锁函数 函数声明 功能 void omp_init_lock(omp_lock*) 初始化互斥器 void omp_destroy_lock(omp_lock*) 销毁互斥器 void omp_set_lock(omp_lock*) 获得互斥器 void omp_unset_lock(omp_lock*) 释放互斥器 void omp_test_lock(omp_lock*) 试图获得互斥器,如果获得成功则返回true,否则返 阅读全文

posted @ 2014-02-12 15:59 berkeleysong 阅读(465) 评论(0) 推荐(0) 编辑

2014年1月12日

C++ STATIC

摘要: C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:[cpp]view plaincopy#includeusingnamespacestd;staticintn;//定义静态全局变量voidfn(){n++;coutusingnamespacestd;voidfn();staticintn;//定义静态全局变量in 阅读全文

posted @ 2014-01-12 20:06 berkeleysong 阅读(107) 评论(0) 推荐(0) 编辑

2013年12月24日

逻辑回归算法

摘要: 谓LR分类器(Logistic Regression Classifier),并没有什么神秘的。在分类的情形下,经过学习之后的LR分类器其实就是一组权值w0,w1,...,wm.当测试样本集中的测试数据来到时,这一组权值按照与测试数据线性加和的方式,求出一个z值:z = w0+w1*x1+w2*x2+...+wm*xm。①(其中x1,x2,...,xm是某样本数据的各个特征,维度为m)之后按照sigmoid函数的形式求出:σ(z) = 1 / (1+exp(z)) 。②由于sigmoid函数的定义域是(-INF, +INF),而值域为(0, 1)。因此最基本的LR分类器适合于对两类目标进行分类 阅读全文

posted @ 2013-12-24 11:07 berkeleysong 阅读(1055) 评论(0) 推荐(0) 编辑

2013年12月6日

C++异常机制的实现方式和开销分

摘要: http://baiy.cn在我几年前开始写《C++编码规范与指导》一文时,就已经规划着要加入这样一篇讨论 C++ 异常机制的文章了。没想到时隔几年以后才有机会把这个尾巴补完 :-)。还是那句开场白:“在恰当的场合使用恰当的特性” 对每个称职的 C++ 程序员来说都是一个基本标准。想要做到这点,就必须要了解语言中每个特性的实现方式及其时空开销。异常处理由于涉及大量底层内容,向来是 C++ 各种高级机制中较难理解和透彻掌握的部分。本文将在尽量少引入底层细节的前提下,讨论 C++ 中这一崭新特性,并分析其实现开销:关于线程函数的调用和返回C++ 函数的调用和返回栈回退(Stack Unwind)机 阅读全文

posted @ 2013-12-06 10:29 berkeleysong 阅读(120) 评论(0) 推荐(0) 编辑

2013年12月3日

Copy-On-Write技术

摘要: http://www.cnblogs.com/chenglei/archive/2009/08/06/1540175.htmlhttp://www.cnblogs.com/biyeymyhjob/archive/2012/07/20/2601655.htmllinux内核在使用fork创建进程时,基本上会使用Copy-On-Write(COW)技术。这里解释一下COW技术以及为什么在fork中使用。WIKI上对COW的解释:Copy-on-write(sometimes referred to as "COW") is anoptimizationstrategy used 阅读全文

posted @ 2013-12-03 16:52 berkeleysong 阅读(133) 评论(0) 推荐(0) 编辑

2013年12月2日

浅谈 linux 多线程编程和 windows 多线程编程的异同

摘要: 很早以前就想写写linux下多线程编程和windows下的多线程编程了,但是每当写时又不知道从哪个地方写起,怎样把自己知道的东西都写出来,下面我就谈谈linux多线程及线程同步,并将它和windows的多线程进行比较,看看他们之间有什么相同点和不同的地方。其实最开始我是搞windows下编程的,包括windows编程,windows 驱动,包括usb驱动,ndis驱动,pci驱动,1394驱动等等,同时也一条龙服务,做windows下的应用程序开发,后面慢慢的我又对linux 开发产生比较深的兴趣和爱好,就转到搞linux开发了。在接下来的我还会写一些博客,主要是写linux编程和window 阅读全文

posted @ 2013-12-02 16:46 berkeleysong 阅读(468) 评论(0) 推荐(0) 编辑

C++多线程编程(入门)

摘要: 1、背景为了更好的理解多线程的概念,先对进程,线程的概念背景做一下简单介绍。早期的计算机系统都只允许一个程序独占系统资源,一次只能执行一个程序。在大型机年代,计算能力是一种宝贵资源。对于资源拥有方来说,最好的生财之道自然是将同一资源同时租售给尽可能多的用户。最理想的情况是垄断全球计算市场。所以不难理解为何当年IBM预测“全球只要有4台计算机就够了”。这种背景下,一个计算机能够支持多个程序并发执行的需求变得十分迫切。由此产生了进程的概念。进程在多数早期多任务操作系统中是执行工作的基本单元。进程是包含程序指令和相关资源的集合。每个进程和其他进程一起参与调度,竞争CPU,内存等系统资源。每次进程切换 阅读全文

posted @ 2013-12-02 10:07 berkeleysong 阅读(1613) 评论(0) 推荐(0) 编辑

上一页 1 ··· 8 9 10 11 12 13 14 15 16 下一页

导航