当前位置:  编程技术>综合
本页文章导读:
    ▪遭遇的各种哭笑不得的mysql悲剧      1. mysql where 后面不能带聚集函数,曾经后面写了个count(*)>xx,结果被人秒了一通,自己还不知道,后来查了资料才知道,这tm是常识啊,悲剧 2.今天用到mysql往外导数据,之前都是小数据量,.........
    ▪杨氏矩阵-young tableau 算法分析+实现      简介:young tableau 是一个很奇特的数据结构,它的性质是堆和BST(二叉查找树)的结合,对于查找它的效率优于堆,对于删除和插入它比BST更方便。 young tableau是一个m*n的矩阵,可以用二维数.........
    ▪redis状态与性能监控       1、redis-benchmark  redis基准信息,redis服务器性能检测  redis-benchmark -h localhost -p 6379 -c 100 -n 100000  100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能   .........

[1]遭遇的各种哭笑不得的mysql悲剧
    来源: 互联网  发布时间: 2013-11-10

1. mysql where 后面不能带聚集函数,曾经后面写了个count(*)>xx,结果被人秒了一通,自己还不知道,后来查了资料才知道,这tm是常识啊,悲剧

2.今天用到mysql往外导数据,之前都是小数据量,没出现过什么问题,今儿就碰到一大数据量的。

     表的id为自增主键,只要其中几个字段,数据量比较大,得分批导出

     结果又犯浑了,用的order by id limit  x,y。我去,怎么查的这么慢,以为是数据太多,没注意

     后来始终出不了结果,让人一看,我去,这sql写的,这扫全表的,还得排序,恍然大悟啊,改成where id> x and id < y  果断迅速跑完。


这半吊子的sql,各种悲剧啊,看来得多学习下了。。。

作者:voiceofwind 发表于2013-1-8 18:08:31 原文链接
阅读:37 评论:0 查看评论

    
[2]杨氏矩阵-young tableau 算法分析+实现
    来源: 互联网  发布时间: 2013-11-10

简介:young tableau 是一个很奇特的数据结构,它的性质是堆和BST(二叉查找树)的结合,对于查找它的效率优于堆,对于删除和插入它比BST更方便。

young tableau是一个m*n的矩阵,可以用二维数组来表示,定义如下:

1,杨氏矩阵的每一行和每一列的元素都以非递减或者非递增的形式排列。

2,如果矩阵中的某一个位置没有存储元素,则把它的值置为无穷大。

先给出一个一位数组,和它转化成的杨氏矩阵:

int a[] ={1,3,5,7,8,11,4,6,9,14,15,19,10,21,23,33,56,57,34,37,45,55,INF,INF,INF,INF,INF,INF,INF,INF};

同时需要说明的就是:对于同一个数组,将其插入到yang tableau中得到的结果是不唯一的。



接下来分别讲述young tableau 的插入,查找和删除。

插入情况:它的插入过程中需要进行调整,首先将插入的元素放在杨氏矩阵的最后一个位置,或者说横纵坐标索引都是最大值。如果图中的(6,e)的位置。假设插入的元素是x,对应在样式矩阵中的元素是 Y[i][j],则Y[i][j]要和它上面的元素Y[i][j-1]进行比较,同时x要和它坐标的元素Y[i-1][j]进行比较,即有如下的条件:

a, Y[i][j] > Y[i-1][j]  and Y[i][j] > Y[i][j-1] 则Y[i][j]的位置不变,不和正上方和正左边的元素交换。

b, 除上述情况外,则在Y[i][j], Y[i-1][j], Y[i][j-1]中选取最大的那个和Y[i][j]交换。

总之具体的思路就是让大的 元素下沉,小的元素上升,下面是算法:

void sift_up(int x, int y) {// sift up
	int min_i;
	int min_j;
	if((y - 1) >= 0 && table[x][y-1] > table[x][y]) {
		min_i = x;
		min_j = y -1;
	} else {
		min_i = x;
		min_j = y;
	}

	if((x - 1) >= 0 && table[x-1][y] > table[min_i][min_j]) {
		min_i = x - 1;
		min_j = y;
	}

	if(min_i != x || min_j != y) {
		swap(&table[x][y], &table[min_i][min_j]);
		sift_up(min_i, min_j);
	}
}


插入元素2后的结果如下:


young tableau 的插入时间复杂度是O(m+n)。


杨氏矩阵的查找:杨氏矩阵的查找也相当的简单,只要掌握了它的基本规律,就是每行每列都递增或者递减,那么从哪里开始进行元素的查找比较合适呢,左下角,如果比左下角的元素小,则向上查找,如果比左下角的元素大则向右查找。这和二叉查找树的情况相同了,左下角的元素就相当于二叉查找树的根。注意越界的情况,给出基本算法:

// if larger than current value, turn to up value, else turn to right value
int find_value(int value, int *x, int *y) { //return 1 for success and valid coordinate, return 0 for fail and invalid coordinat
	int i, j;
	i = MAX_M - 1;
	j = 0;
	while(i >= 0 && j < MAX_N) {
		if(table[i][j] == value) {
			break;
		} else if(value < table[i][j]) {
			i--;
		} else {
			j++;
		}
	}
	if(i < 0 || j >= MAX_N) {
		*x = -1;
		*y = -1;
		return 0;
	} else {
		*x = i;
		*y = j;
		return 1;
	}
}

样式矩阵的删除:

操作类似于插入操作,其时间复杂度也为O(m+n)。其操作类似于堆排序的SIFT-DOWN算法。删除算法可以描述为,首先将删除的位置(x, y)的数字删除,然后调整,把杨氏矩阵中的最大值k(可以行为主序进行搜索到最后)填入到被删除位置,然后让此数与其下面的数(k-d)和右面的数进行(k-r)比较,此时比较结果为两种,因为此时元素一定会下移:

  1:k-d > k-r 将k-r 和 k进行交换

  2:k-d < k-r 将k-d 和 k进行交换

举例 删除图1-1的a3位置的元素5如图1-3


同样的时间复杂度是O(m+n)。

给出完整的代码和测试样例:

#include<iostream>
using namespace std;
#define INFINITY 100000
#define MAX_M 5
#define MAX_N 6

int table[MAX_M][MAX_N];

// if larger than current value, turn to up value, else turn to right value
int find_value(int value, int *x, int *y) { //return 1 for success and valid coordinate, return 0 for fail and invalid coordinat
	int i, j;
	i = MAX_M - 1;
	j = 0;
	while(i >= 0 && j < MAX_N) {
		if(table[i][j] == value) {
			break;
		} else if(value < table[i][j]) {
			i--;
		} else {
			j++;
		}
	}
	if(i < 0 || j >= MAX_N) {
		*x = -1;
		*y = -1;
		return 0;
	} else {
		*x = i;
		*y = j;
		return 1;
	}
}

void swap(int *a, int *b) {// swap value
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
}

void sift_down(int x, int y) {// sift value down
	int min_i, min_j;
	if((x + 1) < MAX_M && table[x + 1][y] < table[x][y]) {
		min_i = x + 1;
		min_j = y;
	} else {
		min_i = x;
		min_j = y;
	}

	if((y + 1) < MAX_N && table[x][y+1] < table[min_i][min_j]) {
		min_i = x;
		min_j = y + 1;
	}

	if(min_i != x || min_j != y) {
		swap(&table[x][y], &table[min_i][min_j]);
		sift_down(min_i, min_j);
	}
}

int delete_value(int value, int x, int y) {// delete value, 
	                                       //before doing delete, 
											//the to be delete value should be find whether is in matrix
	if(x >= MAX_M || y >= MAX_N) {
		return 0;
	}

	table[x][y] = INFINITY;
	sift_down(x, y);
}

void sift_up(int x, int y) {// sift up
	int min_i;
	int min_j;
	if((y - 1) >= 0 && table[x][y-1] > table[x][y]) {
		min_i = x;
		min_j = y -1;
	} else {
		min_i = x;
		min_j = y;
	}

	if((x - 1) >= 0 && table[x-1][y] > table[min_i][min_j]) {
		min_i = x - 1;
		min_j = y;
	}

	if(min_i != x || min_j != y) {
		swap(&table[x][y], &table[min_i][min_j]);
		sift_up(min_i, min_j);
	}
}

void insert_value(int value) {
	table[MAX_M - 1][MAX_N - 1] = value;
	sift_up(MAX_M - 1, MAX_N - 1);
}

void main() {      
    
[3]redis状态与性能监控
    来源: 互联网  发布时间: 2013-11-10

1、redis-benchmark 
redis基准信息,redis服务器性能检测 

redis-benchmark -h localhost -p 6379 -c 100 -n 100000 
100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能 
 

2、redis-cli 

redis-cli -h localhost -p 6380 monitor 
Dump all the received requests in real time; 
监控host为localhost,端口为6380,redis的连接及读写操作 
 

redis-cli -h localhost -p 6380 info 
Provide information and statistics about the server ; 
提供host为localhost,端口为6380,redis服务的统计信息 

作者:gzh0222 发表于2013-1-8 18:01:57 原文链接
阅读:15 评论:0 查看评论

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
软件工程/软件设计 iis7站长之家
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3