自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

TimeTDIT的博客

欢迎指出各种不足

  • 博客(15)
  • 收藏
  • 关注

原创 算法技术--贪心算法

贪心算法分析及其安全性证明

2018-01-30 02:55:54 583

原创 算法技术--动态规划

本文介绍一种算法技术--动态规划。    一、什么是动态规划    动态规划与分治方法相似,通过组合子问题的解来求解问题。分治法会在计算时做许多不必要的工作(记不记得之前的一篇博客分析过没有优化过的斐波那契数列递归实现的时间复杂度高达指数级),然而动态规划则会把求过的子问题记录到一个容器中,从而避免了一些重复的工作。    我们常常使用动态规划来求解最优化问题,步骤如下:    1

2018-01-27 22:59:45 422

转载 Java情诗

If 我未曾 遇到你如同 故事类 还未加载到 虚拟机在 茫茫人海中 循环遍历直到邂逅 true的唯一If 我日渐 倾慕你嵌套循环 也包裹不住 思念满溢慌乱心跳 抛出的 异常信息会捕获到 心灵的秘密If 我沉迷 依恋你穷极 八种数据类型 也难言表心意

2018-01-27 19:53:37 526

原创 拉链法解决哈希冲突的方式和几种常见的散列函数

本文探讨拉链表解决哈希冲突的方式和几种常见的散列函数。    首先,什么是散列表?    对于一个数组,我们在O(1)时间复杂度完成可以完成其索引的查找,现在我们想要存储一个key value的键值对,我们可以根据key生成一个数组的索引,然后在索引存储这个key value键值对。我们把根据key生成索引这个函数叫做散列函数。显而易见,不同的key有可能产生相同的索引,这就叫做哈希碰撞,

2018-01-24 16:10:34 7823

原创 几种基本数据结构--栈、队列、双向链表、有根树的分析和简单实现

本文介绍几种基本数据结构--栈、队列、双向链表、有根树。一、栈    栈不用多说了,一种LIFO(后进先出)的数据结构,我们使用Java实现其入栈(PUSH),出栈(POP)的基本操作:public class Stack { public final static int DEFAULTSIZE = 10; private final E[] elements;

2018-01-23 17:17:46 1516

原创 序列的元素选择问题

本文探讨序列的元素选择问题

2018-01-22 11:28:04 365

原创 桶排序--平均情况下时间代价为O(n)的排序算法

在介绍了计数排序和基数排序两种线性时间复杂度的排序算法之后,我们来介绍第三种时间复杂度为线性,平均情况下的时间代价为O(n)的的排序算法--桶排序。一、适用情况    这种排序假设输入数据服从均匀分布,而且需要已知待排序列的大概范围,是一种空间换时间的排序算法。二、基本思想    对于一个待排序列,我们已知它的大概范围的时候,我们把这个范围分为n个相同大小的子区

2018-01-21 00:53:10 7677

原创 Java中的数组互相赋值

本文探讨Java中数组中的赋值问题。在探讨这个问题之前必须先弄懂一件事,Java中的数组到底是什么东西?是类,是对象,还是什么其他奇奇怪怪的东西。答案是:Java中的数组本质上是对象。但是这个对象不是通过某个类实例化来的,而是JVM创建的,这也就不难解释对于一个数组对象arr,我们可以直接通过arr.length访问数组的长度。    现在我们知道了Java中数组本质上是对象,那么我们来看一下

2018-01-20 18:13:16 36189 2

原创 基数排序--基于计数排序的线性时间复杂度的排序算法

我们前面提到了一种时间复杂度为O(n+k),其中k是待排序列最大值的排序算法--计数排序,复习请点击此处。本文我们将继续介绍一种线性时间复杂度的排序算法--基数排序,这种排序算法的时间复杂度为Θ(d(n+k)),这种排序基于我们之前将的计数排序,其中n表示待排序列的规模,d表示待排序列的最大位数,k表示每一位数的范围,这也是一种时间换空间的算法。一、适用情况    我们看这个算法的

2018-01-20 17:28:07 19238 3

原创 计数排序--时间复杂度为线性的排序算法

我们知道基于比较的排序算法的最好的情况的时间复杂度是O(nlgn),然而存在一种神奇的排序算法,不是基于比较的,而是空间换时间,使得时间复杂度能够达到线性O(n+k),这种算法就是本文将要介绍的计数排序。一、适用情况    这个算法在n个输入元素中每一个都是0到k的范围的整数,其中k也是整数。当k = O(n)时,排序的时间复杂度为Θ(n)。它的性质也就决定了它的运用范围比较窄

2018-01-20 01:29:23 15219 1

原创 求数组的一个和最大的子数组

    假设现在我们需要求数组的一个和最大的子数组,比如对于数组{-1,1,3,-1},和最大的子数组就是{1,3}。我们来设计一下这样的算法。一、暴力法    首先我们可能会想到使用暴力法两层循环来遍历数组求解,外层循环表示子数组的开始位置,内层循环表示子数组的结尾位置,一一遍历,最后得到最大的一个和以及子数组的开头和结尾,我们使用Java来实现: public static int[] ...

2018-01-19 01:03:49 585

原创 斐波那契数列的几种求解方式和复杂度分析

实现求解斐波那契数列的几种算法以及复杂度的比较

2018-01-18 16:40:36 13390 2

原创 Java获得两个整型二进制表示的不同位的个数的几种方法

获得两个整型二进制的不同位个数的几种方法

2018-01-17 16:19:32 1706

原创 Java实现单向链表及其常见操作

本文将使用Java实现链表以及链表的常用操作。一、什么是链表    链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成,而且由于没有闲置的内存,因此空间效率比数组高。其插入操作可达到O(1)复杂度,但是查找或者访问特定的结点复杂度是O(n)。二、单向链表的元素增加实现   ...

2018-01-15 15:49:10 10676

转载 面向对象的7大设计原则

法则1:优先使用(对象)组合,而非(类)继承[ Favor Composition Over Inheritance ]组合n (对象)组合是一种通过创建一个组合了其它对象的对象,从而获得新功能的复用方法。n 将功能委托给所组合的一个对象,从而获得新功能。n 有些时候也称之为“聚合”(aggregation)或“包容”(containment),尽管有些作者对这些术语赋予了专门

2018-01-10 13:36:41 367

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除