数据结构与算法
安静平和
这个作者很懒,什么都没留下…
展开
-
C#——详析GetHashCode方法
GetHashCode函数一般是在操作HashTable或者Dictionary之类的数据集的时候被调用,目的是产生一个Key,为了方便在 HashTable或者 Dictionary中的检索。 每个类型,不管是值类型还是引用类型,都提供这个基本函数,同样也可以像重写ToString或者Equals函数一样去重写它。但是不建议重写此函数,而且在使用这个函数也需要加倍小心。转载 2014-04-10 22:54:18 · 51424 阅读 · 7 评论 -
哈希的原理和代价
哈希表和哈希函数是大学数据结构中的课程,实际开发中我们经常用到Hashtable这种结构,当遇到键-值对存储,采用Hashtable比ArrayList查找的性能高。为什么呢?我们在享受高性能的同时,需要付出什么代价(这几天看红顶商人胡雪岩,经典台词:在你享受这之前,必须受别人吃不了的苦,忍受别人受不了的屈辱),那么使用Hashtable是否就是一桩无本万利的买卖呢?就此疑问,做以下分析,希望能抛转载 2015-12-26 14:46:58 · 571 阅读 · 0 评论 -
网格剖分 Delaunay
http://blog.csdn.net/chinamming/article/details/16874371今天要介绍的这款软件TetGen就是一款网格剖分的软件,算是力学计算中的前处理,他能够将输入的三维模型剖分成一个个的单元,如下图: 最左边的是原三维模型,中间图为Delaunay算法生成的四面体网格,最右边的图为在tetview中查看剖转载 2016-01-27 14:21:04 · 7089 阅读 · 1 评论 -
算法洗脑系列(8篇)——第八篇 概率思想
今天写最后一篇来结束这个系列,我们知道很多算法解决问题的步骤都是固定的,而概率算法每一步的选择都是随机的,当在某些领域问题中通常比最优选择省时,所以就大大提高了算法的效率,降低了复杂度。 一:思想 这里主要讲一下“数值概率算法”,该算法常用于解决数值计算问题,并且往往只能求得问题的近似解,同一个问题同样的概率算法求解两次可能得到的结果大不一样,不过转载 2016-01-09 16:05:55 · 655 阅读 · 0 评论 -
算法洗脑系列(8篇)——第七篇 动态规划
今天跟大家分享下算法思想中比较难的一种"动态规划",动态规划给人像是作战时常用的“迂回战术”,或者说是游击战,在运动中寻找突破口。 一: 思想 首先要了解”动态规划“,必须先知道什么叫做”多阶段决策“,百科里面对这个问题解释的很全,我就load一段出来,大家得要好好品味,好好分析。 上面图中最后一句话就定义了动态规划是要干什么的问转载 2016-01-09 15:54:30 · 1233 阅读 · 0 评论 -
算法洗脑系列(8篇)——第六篇 回溯思想
记得广告中经常听到过,抱着试试看的态度买了3个疗程,效果不错........ 也经常听人说过什么车到山前必有路,船到桥头自然直。哈哈,这种思想就是回溯思想,也可称为试探思想。 一: 思想 有时我们要得到问题的解,先从其中某一种情况进行试探,在试探过程中,一旦发现原来的选择是错误的,那么就退回一步重新选择, 然后继续向前试探,反复这样的过程直转载 2016-01-09 15:12:03 · 601 阅读 · 0 评论 -
算法洗脑系列(8篇)——第五篇 分治思想
一: 思想 有时候我们处理一个复杂的问题,可能此问题求解步骤非常杂,也可能是数据非常多,导致我们当时很难求出或者无法求出,古语有云:步步为营,各个击破,这个思想在算法中称为分治思想,就是我们可以将该问题分解成若干个子问题,然后我们逐一解决子问题,最后将子问题的答案组合成整个问题的答案。 二: 条件 当然各个思想都有它的使用领域,所以玩转载 2016-01-09 14:35:30 · 628 阅读 · 0 评论 -
算法洗脑系列(8篇)——第四篇 枚举思想
今天分享一下枚举思想,这种思想也常是码畜,码奴常用的手段,经常遭到码农以上级别的鄙视,枚举思想可以说是在被逼无奈时最后的狂吼。 一: 思想 有时我们解决某个问题时找不到一点规律,此时我们很迷茫,很痛苦,很蛋疼,突然我们灵光一现,发现候选答案的问题规模在百万之内,此时我们就想到了从候选答案中逐一比较,一直找到正确解为止。 二: 条件转载 2016-01-09 14:15:47 · 657 阅读 · 0 评论 -
算法洗脑系列(8篇)——第二篇 递归思想
今天说说递归思想,在我们编码时,有的时候递归能够让我们的算法更加通俗易懂,并且代码量也是大大的减少。比如我先前的系列中说到了关于树的“先序,中序和后序”遍历,那么看看用递归来描叙这个问题是多少的简洁,多么的轻松。 1 #region 二叉树的先序遍历 2 /// 3 /// 二叉树的先序遍历 4 /// 5 /// 6 /// 7转载 2016-01-08 16:45:20 · 723 阅读 · 0 评论 -
从头到尾彻底解析哈希表算法
http://blog.jobbole.com/49229/说明:本文分为三部分内容,第一部分为一道百度面试题Top K算法的详解;第二部分为关于Hash表算法的详细阐述;第三部分为打造一个最快的Hash表算法。第一部分:Top K 算法详解问题描述百度面试题:搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。转载 2015-12-26 15:56:05 · 691 阅读 · 0 评论 -
Bitmap算法
在所有具有性能优化的数据结构中,我想大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间,多么的简洁优美,但是在特定的场合下:①:对10亿个不重复的整数进行排序。②:找出10亿个数字中重复的数字。当然我只有普通的服务器,就算2G的内存吧,在这种场景下,我们该如何更好的挑选数据结构和算法呢? 一:问题分析 这年头,转载 2015-12-26 16:52:40 · 510 阅读 · 0 评论 -
四叉树空间索引原理及其实现
http://blog.csdn.net/zhouxuguang236/article/details/12312099今天依然在放假中,在此将以前在学校写的四叉树的东西拿出来和大家分享。四叉树索引的基本思想是将地理空间递归划分为不同层次的树结构。它将已知范围的空间等分成四个相等的子空间,如此递归下去,直至树的层次达到一定深度或者满足某种要求后停止分割。四叉树的结构比较简单,并且当空间数据转载 2016-07-18 15:08:06 · 890 阅读 · 0 评论 -
八叉树Octree
维基释义:八叉树(Octree)是一种用于描述三维空间的树状数据结构。八叉树的每个节点表示一个正方体的体积元素,每个节点有八个子节点,这八个子节点所表示的体积元素加在一起就等于父节点的体积。一般中心点作为节点的分叉中心。百度百科释义:八叉树(Octree)的定义是:若不为空树的话,树中任一节点的子节点恰好只会有八个,或零个,也就是子节点不会有0与8以外的数目。那么,这要用来做什转载 2016-07-18 14:56:20 · 2285 阅读 · 0 评论 -
布隆过滤器 -- 空间效率很高的数据结构
哈希 hash原理Hash (哈希,或者散列)函数在计算机领域,尤其是数据快速查找领域,加密领域用的极广。其作用是将一个大的数据集映射到一个小的数据集上面(这些小的数据集叫做哈希值,或者散列值)。一个应用是Hash table(散列表,也叫哈希表),是根据哈希值 (Key value) 而直接进行访问的数据结构。也就是说,它通过把哈希值映射到表中一个位置来访问记录,转载 2016-07-17 12:19:46 · 1123 阅读 · 0 评论 -
C++ 字符串转换为浮点数时的精度问题
#include /*库文件包含*/#include /*用于字符串操作*/#include /*用于exit函数*//**************************************************************************int check(char *c)输入参数: char *c: 输入的字符串返回参数: 0:字符串中有不符合规定转载 2016-07-01 10:15:20 · 4489 阅读 · 0 评论 -
傅里叶变换
https://zhuanlan.zhihu.com/p/19763358作者:Heinrich链接:https://zhuanlan.zhihu.com/p/19763358来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作 者:韩 昊知 乎:Heinrich微 博:@花生油工人 知乎专栏:与时间无关的故事转载 2016-06-13 16:58:42 · 3096 阅读 · 0 评论 -
常见的hash函数
http://blog.csdn.net/mycomputerxiaomei/article/details/7641221哈稀函数按照定义可以实现一个伪随机数生成器(PRNG),从这个角度可以得到一个公认的结论:哈希函数之间性能的比较可以通过比较其在伪随机生成方面的比较来衡量。一些常用的分析技术,例如泊松分布可用于分析不同的哈希函数对不同的数据的碰撞率(collisi转载 2016-06-13 15:57:13 · 1081 阅读 · 0 评论 -
二十世纪最伟大的10大算法
发明十大算法的其中几位算法大师一、1946 蒙特卡洛方法[1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos Scientific Laboratory, cook up the Metropolis algorithm, also known as the Monte转载 2016-06-13 12:32:52 · 952 阅读 · 0 评论 -
三维模型的网格细化
http://blog.csdn.net/chinamming/article/details/16874387三维模型的网格细化是基于网格离散曲面的一种表示方法,它可以从任意拓扑网格构造光滑曲面。细化方法的基本思想是:定义一个网格序列的极限,网格序列是采用一定的细分规则(一般是加权平均),在给定的初始网格中插入新的顶点,从而不断细化出新的网格,重复运用细分规则,在极限时,该网格即收敛转载 2016-01-27 16:40:45 · 3678 阅读 · 2 评论 -
算法洗脑系列(8篇)——第一篇 递推思想
像俺一样奋斗在一线的码农们,一谈到学编程,都是说要学会XX语言就OK了,其实我们理解的有一点点的偏差,因为我们只说到了三分之一,其实真正的编程应该是:编程=数据结构+算法+XX语言。 对的,XX语言只是一个工具而已,就好比我们知道用笔来写字,但是不见得我们就能写出一手让张恨水为之倾倒的好字,其实我也说过算法不仅仅用于程序设计中,在我们的生活中也处处存在着算法,比如记得转载 2016-01-08 16:24:26 · 954 阅读 · 0 评论 -
白话经典算法系列之一 冒泡排序的三种实现
冒泡排序是非常容易理解和实现,,以从小到大排序举例:设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。3.N=N-1,如果N不为0就重复前面二步,否则排序完成。 按照定义很容易写出代码:[cpp]转载 2015-12-22 11:01:30 · 631 阅读 · 0 评论 -
几个常见的压缩算法
几个常见的压缩算法(转)(一) 字典算法字典算法是最为简单的压缩算法之一。它是把文本中出现频率比较多的单词或词汇组合做成一个对应的字典列表,并用特殊代码来表示这个单词或词汇。例如:有字典列表:00=Chinese01=People02=China源文本:I am a Chinese people,I am from China 压缩后的编码为:I am a 00 0转载 2014-09-01 12:39:57 · 1295 阅读 · 0 评论 -
点到线段的距离
这是点到线段的距离 不是点到直线的距离: public double PointLine_Disp(double xx, double yy, double x1, double y1, double x2, double y2) { double a, b, c, ang1, ang2, ang, m; double原创 2014-09-01 13:16:53 · 768 阅读 · 0 评论 -
C# 类型基础
引言本文之初的目的是讲述设计模式中的 Prototype(原型)模式,但是如果想较清楚地弄明白这个模式,需要了解对象克隆(Object Clone),Clone其实也就是对象复制。复制又分为了浅度复制(Shallow Copy)和深度复制(Deep Copy),浅度复制 和 深度复制又是以 如何复制引用类型成员来划分的。由此又引出了 引用类型和 值类型,以及相关的对象判等、装箱、拆箱等基础转载 2014-07-25 14:17:17 · 1022 阅读 · 0 评论 -
C#中数组、ArrayList和List三者的区别
在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢。数组 数组在C#中最早出现的。在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单。[csharp] view plaincopy"font-family:SimSun;font-size:18px;">//数组转载 2014-07-24 15:35:16 · 1372 阅读 · 1 评论 -
IEnumerable与IEnumerator在C#中的使用
一、示例:在C#中,凡是实现了IEnumerator接口的数据类型都可以用foreach语句进行迭代访问,可是,对于自定义类型如何实现这个接口以支持foreach的迭代呢? * 要实现这个功能,先来看看IEnumerable和IEnumerator接口的定义:public interface IEnumerable{ //IEnumerable只有一个方法,返转载 2014-07-24 15:06:56 · 967 阅读 · 0 评论 -
获得ID号(和以前的ID号,不能重复)
1、DateTime.Now.Ticks是指从1970年1月1日(具体哪年忘了哈,好像是1970)开始到目前所经过的毫秒数——刻度数。转载 2014-04-10 21:49:29 · 1073 阅读 · 0 评论 -
.NET(C#):GetHashCode 的作用
今儿看到两位同学在讨论GetHashCode方法的执行,貌似他们的对象等同性判断挺复杂的,而又想把同样的逻辑写在GetHashCode中,然后激烈的讨论着用什么算法让GetHashCode返回的整数更具唯一性。我觉得简而言之GetHashCode的作用就是:尽量用最快的时间对对象进行初步判断。当然这里时间的快慢和判断的深度没有具体要求,只要没有走极端就可以(比如太费时间,或者判断深度太浅)转载 2014-04-10 21:53:44 · 4141 阅读 · 1 评论 -
.NET(C#):GetHashCode 的作用
今儿看到两位同学在讨论GetHashCode方法的执行,貌似他们的对象等同性判断挺复杂的,而又想把同样的逻辑写在GetHashCode中,然后激烈的讨论着用什么算法让GetHashCode返回的整数更具唯一性。我觉得简而言之GetHashCode的作用就是:尽量用最快的时间对对象进行初步判断。当然这里时间的快慢和判断的深度没有具体要求,只要没有走极端就可以(比如太费时间,或者判断深度太浅)转载 2014-04-10 21:51:44 · 5824 阅读 · 0 评论 -
浮点数的存储
二:浮点数的存储格式2.1 IEEE floating point standard上面我们说了,浮点数的小数点是不固定的,如果每个人都按照自己的爱好存储在电脑里,那不就乱套了吗?那么怎么在计算机中存储这种类型的数字呢?象这类古老的问题前人早都为我们做好了相应的规范,无规矩不成方圆吗。我们平时所说的浮点数的存储规范,就是由IEEE指定的,具体的规范文件是:IEEE Standa转载 2014-09-01 13:12:51 · 1168 阅读 · 0 评论 -
C# 数据类型基础,堆栈,装箱与拆箱
引言本文之初的目的是讲述设计模式中的 Prototype(原型)模式,但是如果想较清楚地弄明白这个模式,需要了解对象克隆(Object Clone),Clone其实也就是对象复制。复制又分为了浅度复制(Shallow Copy)和深度复制(Deep Copy),浅度复制 和 深度复制又是以 如何复制引用类型成员来划分的。由此又引出了 引用类型和 值类型,以及相关的对象判等、装箱、拆箱等基础转载 2014-09-02 16:53:34 · 1779 阅读 · 0 评论 -
白话经典算法系列之五 归并排序的实现
http://blog.csdn.net/morewindows/article/details/6678165#quote归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这转载 2015-12-22 10:19:46 · 439 阅读 · 0 评论 -
进程 线程 应用程序域
进程的出现:(复习功课嘛,就把相关的内容都看看了,哎,都忘的差不多了) 进程由操作系统创建、管理的,离开了操作系统也就不谈什么进程了,先看看操作系统的四个基本特征: 1.并发(concurrence) 并行性与并发性这两个概念是既相似又区别的两个概念。并行性是指两个或者多个事件在同一时刻发生,这是一个具有微观意义的概念,即在物理上这些事件是同时发生的;而并发性是指两个转载 2014-07-24 11:12:28 · 941 阅读 · 0 评论 -
堆、栈、堆栈的含义(转)
堆”和“栈”是独立的概念平常说的“堆栈”实际上是两个概念:“堆”和“栈”。在英文中,堆是heap,栈是stack,不知道什么时候,什么原因,在中文里,这两个不同的概念硬是被搞在一起了,所以,围绕这个混合词所发生的误解和争执这几年就没有断过。 “栈”一般是由硬件(CPU)实现的,CPU用栈来保存调用子程序(函数)时的返回地址,高级语言有时也用它作为局部变量的存储空间。 “堆”是个实实转载 2014-07-24 18:14:40 · 1862 阅读 · 0 评论 -
堆栈 简单介绍
C/C++一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数名,局部变量的名等。其操作方式类似于数据结构中的栈。2、堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)—全局变量和转载 2014-04-07 17:43:33 · 688 阅读 · 0 评论 -
堆和栈的区别 (转贴)
非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据转载 2014-07-24 14:19:39 · 594 阅读 · 0 评论 -
刻度轴 规范值算法
//CorMax 数据最大值 //CorMin 数据最小值 //CorNumber 刻度个数 public void Standard(ref double CorMax, ref double CorMin, int CorNumber) { double tmpMax, tmpMin; double转载 2015-10-15 17:43:27 · 902 阅读 · 0 评论 -
规范化轴的最大最小值 和 间隔
想做一个根据时间点得到的数据绘制曲线的功能模块,现在遇到一个问题希望可以得到大家的指点.Y轴是数据轴,如:在某个时间段内数据区间是 0.016 - 0.875希望得到的效果是Y轴刻度根据数据区间不同最大值和最小值可以自动调整的,并且希望上,下都可以留出一小部分空间(就是最大值的点不要靠顶部显示,最小值的点也不要靠底部显示),类似上面的数据Y轴可以做成0-1或者0.1-0.9(极值相关不转载 2015-09-19 16:33:10 · 4945 阅读 · 0 评论 -
编码介绍 ASCII与Unicode, codepage, utf-8
1. ASCII ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。 因为1位二进制数可以表示(2=)2种状态:0、1;而2位二进制数可以表示(2=)转载 2014-11-05 14:15:01 · 2917 阅读 · 0 评论