算法
文章平均质量分 83
想旅游咯
哈哈哈哈
展开
-
基于情感词典和朴素贝叶斯算法实现中文文本情感分类
最近派给我一个任务,说是要做情感分析的东西,最开始对此也是一点都不了解,经过一段时间的学习,对一个给出的算法做了一下简单的实现。首先,扯一下概念性的东西:人们对事物的情感都是有两面性的,如正面与反面、褒义与贬义等。一般认为,文本的情感倾向分配是一个两分类问题,就是把文本分成正面和负面两类,一般中文情感分类器的构建过程主要包括中文文本处理及表示、特征选择、分类器训练和分类原创 2015-05-26 10:37:16 · 13578 阅读 · 6 评论 -
数组中只出现一次的数
首先看看题目要求:数组A中,除了某一个数字x之外,其他数字都出现了三次,而x出现了一次。请给出最快的方法找到x。 这个题目非常有意思,在本人博客中有《位操作基础篇之位操作全面总结》这篇文章介绍了使用位操作的异或来解决——数组中其他数字出现二次,而x出现一次,找出x。有《【白话经典算法系列之十二】数组中只出现1次的两个数字(百度面试题)》这边文章介绍了分组异或的方法来解决——原创 2015-01-26 21:37:14 · 315 阅读 · 0 评论 -
JSON进阶第二篇 AJAX方式传递JSON数据
上一篇《JSON进阶第一篇 在PHP与javascript 中使用JSON》示范了在PHP和javascript中如何使用JSON类型的数据,本篇将介绍用AJAX方式得到JSON数据从而动态生成标题和提示语句。这种技术在静态页面向网站后台请求动态数据时比较有效,因为网站首页的访问量比较大,整个页面要静态化处理,但这个页面上的某些数据又要实时更新,这时就可以在静态页面中使用用AJAX来请求后台实原创 2015-01-26 21:22:57 · 275 阅读 · 0 评论 -
改进的筛素数法
最简单的筛素数法方法就是从2开始,将所以2的倍数去掉,然后从3开始,将3的倍数去掉。根据这样很容易写出代码,下面代码就是是筛素数法得到100以内的素数并保存到primes[]数组中。//by MoreWindows( http://blog.csdn.net/MoreWindows )const int MAXN = 100;bool flag[MAXN];int primes[MA原创 2015-01-26 21:19:38 · 214 阅读 · 0 评论 -
stack栈
栈(statck)这种数据结构在计算机中是相当出名的。栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。因此实现非常的方便。下面就给出栈的函数列表和VS2008中栈的源代码,在STL中栈一共就5个原创 2015-01-26 21:08:42 · 195 阅读 · 0 评论 -
deque双向队列
deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似,下面列出deque的常用成员函数:deque的实现比较复杂,内部会维护一个map(注意!不是STL中的map容器)即一小块连续的空间,该空间中每个元素都是指针,指向另一段(较大的)区域,这个区域称为缓冲区,缓冲区用来保存deque中的数据。因此deq原创 2015-01-26 21:07:30 · 279 阅读 · 0 评论 -
C++ 类的静态成员详细讲解
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即::。在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静态成员变量原创 2015-01-26 21:01:38 · 223 阅读 · 0 评论 -
VC 用发音函数Beep()播放简谱音乐
Win32 API中有个非常有意思的发音函数Beep(),可以用它在扬声器上播放简单的音调,如果按简谱来设置播放的内容,就可以播放一些简单的音乐了。函数原型:BOOL WINAPI Beep( __in DWORD dwFreq, __in DWORD dwDuration);函数说明:第一个参数表示频原创 2015-01-26 20:52:37 · 295 阅读 · 0 评论 -
热门智力题 过桥问题和倒水问题
过桥问题和倒水问题都是笔试面试中的热门智力题,不但微软、GOOGLE、百度、腾讯等公司采用,甚至在IQ测试与公务员考试中都能见到。本文不但教你如何快速用手算来解决这两种问题,并且教你如何用程序代码来计算这两种问题。绝对让你大有收获。一.过桥问题在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只原创 2015-01-26 20:45:51 · 388 阅读 · 0 评论 -
以字节为单位显示变量的内存存储数据
之前在《位操作基础篇之位操作全面总结》中写了一个变量内存存储查看函数——PrintfBinary,代码如下:[cpp] view plaincopytemplate class T> void PrintfBinary(T a) { int i; for (i = sizeof(a) * 8 - 1; i >= 0;原创 2015-01-26 21:38:57 · 503 阅读 · 0 评论 -
VC++ 得到计算机名和用户名 GetComputerName GetUserName
在CSDN论坛上看到有帖子在问如何获得计算机名称及用户名。这个其实非常简单。二个函数——GetComputerName和GetUserName就搞定了。其函数原型如下:一.GetComputerName//By MoreWindows-(http://blog.csdn.net/MoreWindows)BOOLWINAPI GetComputerName( _原创 2015-01-26 21:40:55 · 462 阅读 · 0 评论 -
使用VC库函数中的快速排序函数
上一篇讲了快速排序的实现。但在很多场合,直接使用快速排序的库函数是很方便的。下面讲下VC中库函数qsort()的用法:函数原型:void qsort(void *base,size_t num,size_t width, int (__cdecl *compare )(const void *, const void *) );第一个是数组地址,第二是数组大小,第三个是数组原创 2015-01-26 20:24:29 · 212 阅读 · 0 评论 -
C语言中的continue用法
以前不怎么用continue,现在温习下。continue只结束本次循环,而非终止整个循环。break则是结束所在循环,不再进行条件判断。continue增加循环入口,break增加循环或switch语句的出口。#includeint main(){ int i; for(i=1;i<=100;i++) { if(i%2==0) { continue;原创 2015-01-20 16:58:13 · 1599 阅读 · 0 评论 -
C语言结构分析
// #与include之间可以有多个空格 // #include<> 是包含的系统文件// #include"" 是我们自己写的文件// #include 的作用是告诉编译器在编译前先做预处理,将后面的列出文件的内容复制到当前文件// CPP 全称是CPlusPlus#include //返回值为空类型,可以不返回 ,main是函数的名称,C程序的入口点,从这里开始,从这里结原创 2015-01-26 14:25:16 · 286 阅读 · 0 评论 -
C语言windows编程
#include#include // 弹出对话框,弹出void main(){printf("hello world");MessageBox(0,"我是内容","我是标题",0);//第一个参数设置为0,第一个参数是依赖窗口的编号,相当于谁弹出了窗口,0为系统弹出;//第二个参数是对话框的内容,//第三参数是对话框的标题,//第四个参数是对话框的类型,设置为0即可ShellExecute(0,原创 2015-01-20 16:37:29 · 1162 阅读 · 0 评论 -
C语言实参与形参
#includevoid change(int a){ a = 100; printf("a的地址为%d\n",&a);}void main(){ int a; printf("a的地址为%d\n", &a); a = 10; change(a); printf("%d",a); //输出结果为:10 //实参a和形参a在内存中的并不是同一个地址。 //通过调用函数传原创 2015-01-31 11:13:01 · 520 阅读 · 0 评论 -
C语言中数组的基本概念
1、数组是可以在内存中连续存储多个元素的结构,数组中的所有元素必须属于相同的数据类型2、sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。3、要防止数组下标越界。#include#includevoid main(){ int a[5] = { 1, 2, 3, 4, 5 }; //数组在内存中是连续排列的原创 2015-01-31 16:09:21 · 684 阅读 · 0 评论 -
C语言中函数求参数的顺序
#includevoid main(){ int num; num = 9; printf("第一个数值%d,第二数值为%d",num,num++); getchar();}输出结果为:第一个数值10,第二数值为9#includevoid main(){ int num; num = 9; printf("第一个数值%d,第二数值为%d",num,+原创 2015-01-31 11:47:38 · 890 阅读 · 0 评论 -
C语言实现整数逆置
#define _CRT_SECURE_NO_WARNINGS#include#includeint getn(int n) //n表示位数{ int res=1; for(int i=1;i<=n;i++) { res*=10; } return res;}void main(){ int a,wei=0; printf("请输入要逆置的整数:"); sca原创 2015-01-27 15:03:00 · 982 阅读 · 0 评论 -
如何在C/C++中动态分配二维数组
如何在C/C++中动态分配二维数组在C/C++中动态分配二维数组可以先申请一维的指针数组,然后该数组中的每个指针再申请数组,这样就相当于二维数组了,但是这种方法会导致每行可能不相邻,从而访问效率比较低。如何申请连续的二维数组了?本文将分别三个方面讲解:一.动态申请列大小固定的二维数组二.C语言中动态申请连续的二维数组三.C++语言中动态申请连续的二维数组原创 2015-01-26 20:38:56 · 291 阅读 · 0 评论 -
经典算法之七大排序总结篇
冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法进行了详细的讲解,并做成了电子书以供大家下载。下载地址为:http://download.csdn.net/detail/morewindows/4443208。 有网友提议到这本《MoreWindows白话经典算法之七大排序》电子书讲解细致用来平时学习是非常好的,但是页数有22页,不原创 2015-01-26 20:36:24 · 925 阅读 · 0 评论 -
一道有趣的GOOGLE面试题
最近在微博上看到一道有趣的GOOGLE面试题,见下图:文字版:一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间和O(n)时间。 这个题目要求用O(n)的时间复杂度,这意味着只能遍历数组一次。同时还要寻找重复元素,很容易想到建立哈希表来完成,遍历数组时将每个元素映射到哈希表中,如原创 2015-01-26 20:30:24 · 335 阅读 · 0 评论 -
从归并排序到数列的逆序数对(微软笔试题)
微软2010年笔试题在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序数对。一个排列中逆序的总数就称为这个排列的逆序数。如{2,4,3,1}中,2和1,4和3,4和1,3和1是逆序数对,因此整个数组的逆序数对个数为4,现在给定一数组,要求统计出该数组的逆序数对个数。 计算数列的逆序数对个数最简单的方便就最从前向后依次统计每个数字原创 2015-01-26 20:28:49 · 300 阅读 · 0 评论 -
归并排序的实现
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。[cpp] view plaincopy原创 2015-01-26 20:18:20 · 244 阅读 · 0 评论 -
求水仙花数
#include#includevoid main(){ int a,b,c; for(int i=100;i<=999;i++) { a=i%10; //表示个位 b=i/10%10;//表示个位 c=i/10/10;//表示百位 if(a*a*a+b*b*b+c*c*c==i) { printf("%d是水仙花数,且%d=%d^3+%d^3+%d^3\n"原创 2015-01-26 15:06:50 · 339 阅读 · 0 评论 -
百度面试经历
10月21日-一面1.HR:自我介绍一下2.HR:介绍一下你的项目HR:讲一下你的这个项目中的关键技术HR:你的这些算法是OPENCV中自带的函数还是自己写的?(HR似乎对我的项目没什么兴趣)3.HR:写一个程序,使单词反序,如“I love ACM”转为"ACM love I".可以认为字符串中只有字母和空格,且两个单词间只原创 2015-01-27 08:57:33 · 520 阅读 · 0 评论 -
随机生成和为S的N个正整数——投影法
随机生成和为S的N个正整数有很多种解法。下面讲解一种比较高效且比较有趣味性的解法——投影法。 以生成和为20的4个数为例,可以先生成随机生成0到20之间的三个数字再排序,假设得到了4,7,18。然后在X-Y数轴上画出这三个数,如下图:然后将这些数值投影到Y轴上,可得下图:由图很容易看出AB,BC,CD,DE这四段的长度和肯定为20。因此AB,BC,CD原创 2015-01-26 21:31:52 · 351 阅读 · 0 评论 -
slist单链表
微软的VS208所使用的PJ STL(注1)中的list是双链表,但在某些场合,一个轻量级的单链表会更加合适。单链表非常常见,这里就不去细说了,本文的slist(single linked list)单链表实现了链表的基本功能,如有需要,以后还会扩充的。slist单链表(带头结点)的示意图如下所示:完整的C++代码如下://带头结点的单链表 //by MoreWind原创 2015-01-26 21:12:54 · 347 阅读 · 0 评论 -
heap 堆
下面再介绍STL中与堆相关的4个函数——建立堆make_heap(),在堆中添加数据push_heap(),在堆中删除数据pop_heap()和堆排序sort_heap():头文件 #include 下面的_First与_Last为可以随机访问的迭代器(指针),_Comp为比较函数(仿函数),其规则——如果函数的第一个参数小于第二个参数应返回true,否则返回false。建原创 2015-01-26 20:57:38 · 216 阅读 · 0 评论 -
冒泡排序的三种实现
冒泡排序是非常容易理解和实现,,以从小到大排序举例:设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。3.N=N-1,如果N不为0就重复前面二步,否则排序完成。按照定义很容易写出代码://冒泡排序1void B原创 2015-01-26 20:09:57 · 227 阅读 · 0 评论 -
“基数排序”之数组中缺失的数字
首先看看题目要求:给定一个无序的整数数组,怎么找到第一个大于0,并且不在此数组的整数。比如[1,2,0]返回3,[3,4,-1,1]返回2,[1, 5, 3, 4, 2]返回6,[100, 3, 2, 1, 6,8, 5]返回4。要求使用O(1)空间和O(n)时间。 这道题目初看没有太好的思路,但是借鉴下《白话经典算法系列之十 一道有趣的GOOGLE面试题》这篇文原创 2015-01-26 21:42:18 · 340 阅读 · 0 评论 -
Windows 各种计时函数总结
本文对Windows平台下常用的计时函数进行总结,包括精度为秒、毫秒、微秒三种精度的5种方法。分为在标准C/C++下的二种time()及clock(),标准C/C++所以使用的time()及clock()不仅可以用在Windows系统,也可以用于Linux系统。在Windows系统下三种,使用Windows提供的API接口timeGetTime()、GetTickCount()及QueryPerf原创 2015-01-26 21:28:00 · 255 阅读 · 0 评论 -
堆与堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总原创 2015-01-26 20:53:50 · 229 阅读 · 0 评论 -
希尔排序的实现
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很原创 2015-01-26 20:12:25 · 189 阅读 · 0 评论 -
C/C++变量在内存中的分布
C/C++变量在内存中的分布在笔试时经常考到,虽然简单,但也容易忘记,因此在这作个总结,以加深印象。先写一个测试程序:#include #include int g_i = 100;int g_j = 200;int g_k, g_h;int main(){ const int MAXN = 100; int *p = (int*)malloc(MAXN * siz原创 2015-01-26 21:10:24 · 226 阅读 · 0 评论 -
快速排序 快速搞定
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速原创 2015-01-26 20:22:37 · 238 阅读 · 0 评论 -
直接选择排序及交换二个数据的正确实现
直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。设数组为a[0…n-1]。1. 初始时,数组全为无序区为a[0..n-1]。令i=02. 在无序区a[i…n-1]中选取一个最小的元素,将其与a[i]原创 2015-01-26 20:15:36 · 210 阅读 · 0 评论 -
直接插入排序的三种实现
直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。 设数组为a[0…n-1]。1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=12. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。原创 2015-01-26 20:10:57 · 272 阅读 · 0 评论 -
“一步千里”之数组找数
首先看看题目要求(题目来源:http://weibo.com/lirenchen,特此鸣谢):有这样一个数组A,大小为n,相邻元素差的绝对值都是1。如:A={4,5,6,5,6,7,8,9,10,9}。现在,给定A和目标整数t,请找到t在A中的位置。除了依次遍历,还有更好的方法么?这道题目的解法非常有趣。数组第一个数为array[0], 要找的数为y,设t = abs(y原创 2015-01-26 21:42:13 · 309 阅读 · 0 评论 -
VC++ 修改计算机名称 SetComputerName
上一篇《VC++得到计算机名和用户名》讲解了如何使用GetComputerName和GetUserName来获取计算机名称及用户名。本篇来讲解用SetComputerName来修改计算机名称。函数原型://By MoreWindows-(http://blog.csdn.net/MoreWindows)BOOLWINAPISetComputerName( __原创 2015-01-26 21:40:13 · 1004 阅读 · 0 评论