
经典算法
文章平均质量分 82
AC_Dreameng
行有余力,则来刷题!
展开
-
经典算法之一:快速排序
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速原创 2016-12-20 21:28:01 · 27561 阅读 · 5 评论 -
HDU 6112 今夕何夕【2017"百度之星"】【日期模拟计算】【基姆拉尔森计算公式】【蔡勒公式】
题意简单,但是日期类题目计算有点麻烦。。。。1.直接模拟。题目中说‘今天’是2017年8月6日,星期日,我们要寻找下一个8月6日也是星期日的年份。这里要分三种情况进行讨论。1.1 若开始日期在在3月以后(包含3月,无论今年是平年还是闰年),则到下一年今天则会经过365天,星期数会向后推一天(365%7=1)1.2 若开始日期在2月29日,则到下一个2月29日至少要过4年。1.3 如开始日期在2月29日之前:1.3.1 若今年为闰年,则到明年今日要经过366天,否则为365天。原创 2017-08-14 15:39:23 · 1336 阅读 · 0 评论 -
PAT L2-008. 最长对称子串(25) (暴力,Manacher算法和DP解决)
1000的长度,100ms,o(N^2)的复杂度是可以过的,那就暴力枚举吧,每次枚举起点和终点没如果此子串是回文串,那终点-起点+1即为回文串的长度,即可求出最大长度.中间有个小问题,看代码注释.原创 2017-03-24 17:23:50 · 1217 阅读 · 2 评论 -
C++排序之数组,Vector,priority_queue
说到c/c++排序,大家肯定想到用algorithm里的排序,或者c里的qsort.但真正理解的又有多少,故现在整理一下.一.数组排序.sort()函数默认从小到大的排序,如要从大到小的排序,一般人都会去写一个cmp函数,两三行代码解决?但是?能不能有更简单的方法呢?或者更加简短的代码?答案是肯定的.下面的代码将详细阐述数组排序问题.#include#include#inclu原创 2017-03-21 21:19:50 · 2649 阅读 · 2 评论 -
康托展开
康托展开 康托展开的公式是 X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! 其中,ai为当前未出现的元素中是排在第几个(从0开始)。 这个公式可能看着让人头大,最好举个例子来说明一下。例如,有一个数组 s = ["A", "B", "C", "D"],它的一个排列 s1 = ["D", "B", "A", "C"],现在要转载 2017-03-19 20:15:41 · 914 阅读 · 0 评论 -
矩阵乘法测试
矩阵乘法测试:原创 2017-02-28 21:19:23 · 2095 阅读 · 5 评论 -
V I M 教 程
================================================================================ 欢 迎 阅 读 《 V I M 教 程 》 —— 版本 1.7 =================================================原创 2017-02-28 13:50:04 · 705 阅读 · 0 评论 -
经典算法之四:堆排序
堆排序 Heap Sort 堆排序是一种选择排序,其时间复杂度为O(nlogn)。堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。 情形1:ki 2i 且ki 2i+1 (最小化堆或小顶堆) 情形2:ki >= k2i 且ki >= k2i+1 (最大化堆或大顶堆) 其中i=1,2,…,n/2向下取整;转载 2017-01-04 21:58:39 · 2333 阅读 · 0 评论 -
经典算法之四:希尔排序的实现
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因转载 2017-01-03 20:14:45 · 861 阅读 · 0 评论 -
经典算法之二:归并排序
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。[cpp] view plain copy1. //将有原创 2016-12-24 15:27:19 · 632 阅读 · 0 评论 -
经典算法之二:冒泡排序及优化
【1】冒泡排序理论(1)基本概念由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。冒泡排序的时间复杂度为O(n*n)。冒泡排序具有稳定性(参见随笔《常用排序算法稳定性分析》)。(2)逻辑分析依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后原创 2016-12-21 16:34:24 · 654 阅读 · 0 评论 -
【2017多校】HDU 6106 Classes 【集合计算】
题意:n个班每个班的学生报名ABC三种课程,求n个班中人数最多的班级。每个班级一次给出报了A,B,C,AB,AC,BC,ABC,的人数注:数据有可能是假的,假的数据直接忽略掉,保证一定有一个真的数据做法:1只报AB的人数 == 报了AB的人数 -- 报了ABC的人数只报了A的人数 == 报了A的人数 -- 只报AB的人数 -- 只报AC的人数 -- 报了ABC的人数这样就可以求出每个类的人数。原创 2017-08-15 15:18:06 · 486 阅读 · 0 评论