算法笔记

以下是为您整理出来关于【算法笔记】合集内容,如果觉得还不错,请帮忙转发推荐。

【算法笔记】技术教程文章

算法笔记--二分【代码】

二分查找 对于递增序列,顺序查找的时间复杂度为O(n),如果序列太大,就很难承受在有序序列中,利用二分查找可以有效减少时间复杂度,其时间复杂度为O(logn)对于递增数列,二分查找如下:#include<cstdio> int binarySearch(int myArray[], int left, int right, int x){while(left <= right){int mid = (left + right) / 2;if(myArray[mid] == x)return mid;else if(myArray[mid] < x){left = mid + 1;}elseright = mid - 1;}retu...

算法笔记(二)抽牌法产生随机全排列

上一章的算法笔记,并不算一个算法系列的一个合适的開始。而本章将会介绍一种产生随机全排列的方法,下一章開始,就正式開始我们的排序算法了。在我们的排序算法演示器中,我们须要一组随机的数据来作为排序的開始,而本章,就会产生这么一组随机数据。(一)实现分析我们须要一组随机的数据,并且似乎产生的方法不会太难。我们仅仅须要通过rand()函数获得一个随机数,让其对count(排序的规模)取模,结果作为数组的索引,其值是当...

[数据结构和算法]折半插入排序算法笔记【代码】

/// <summary>/// 步骤:/// 1.记录当前待排元素/// 2.标记顺序表有序查找区域下界和上界/// 3.在顺序表有序查找区域中折半查找等待排序元素的位置/// 4.把顺序表有序查找区域的某些元素后移一位,以空出位置给等待排序的元素/// 5.在空出的位置填写当前排序元素/// </summary>/// <param name="elements"></param>staticvoid SqListSort(int[] elements) {int low; // 有序区域下界int mid; // 有序区域中界int high;// 有序...

算法笔记--标准模板库STL--pair【代码】

pair的常见用法pair是一个很实用的“小玩意”,当想要将两个元素绑在一起作为一个合成元素、又不想要因此定义结构体时,使用pair可以很方便地作为一个代替品。也就是说,pair实际上可以看作一个内部有 两个元素的结构体,且这两个元素的类型是可以指定的,如下面的短代码所示:struct pair{typeName1 first;typeName2 second; } pair的定义头文件#include<utility> using namespace std; 因为实现map时候已经使用了pair,所以...

《算法》笔记 8 - 二叉查找树【代码】【图】

二叉查找树 查找插入性能有序性相关的操作 最大键、最小键向上取整、向下取整选择、排名范围查找删除操作 删除最大键、最小键通用删除操作二叉查找树前面了解的无序链表和有序数组在性能方面至少在线性级别,无法用于数据量大的场合。接下来要学习的二叉查找树可以将链表插入的灵活性和有序数组查找的高效性结合起来,是计算机科学中最重要的算法之一。 一个二叉查找树(Binary Search Tree)是一颗二叉树,其中每个结点都含有一个...

排序算法笔记【图】

这篇博客源于最近正在准备的面试。XX的 一个笔试题。在这简单总结一下。如题:请用任意语言,完成至少一种算法。从数据结构 软考和实际的应用中我们都有了 一定的理解。今天我们开看看。话不多说,直接贴代码。选择排序:插入排序:其实到现在,这样的代码也都很简单,平时也应该多回顾多复习一下。版权声明:本文为博主原创文章,未经博主允许不得转载。原文:http://blog.csdn.net/u010176014/article/details/46684115

算法笔记之堆排序【图】

一、对堆排序的相关了解1、堆排序的运行时间是 O(nlogn) ;2、定义:堆heap是一棵具有以下属性的二叉树——(1)它是一棵完全二叉树;(2)每个结点大于或等于它的任意一个孩子。 备注:完全二叉树的定义——除了最后一层没填满以及最后一层的叶子都是偏左放置的,其他层都是满的二叉树! 3、二叉堆有两种:最大堆和最小堆。在堆排序中我们使用的是最大堆,最小堆常常在构造优先队列时使用。 ...

《算法笔记》3.2小节 1937 Problem D 查找【代码】

#include <stdio.h> constint maxn = 100; int a[maxn] = {0}; int b[maxn]= {0}; int main(void) {int n;while(scanf("%d", &n) != EOF){for(int i=0; i<n; i++){scanf("%d", a+i);}int m;scanf("%d", &m);int j;for(int i=0; i<m; i++){scanf("%d", b+i);for(j=0; j<n; j++){if(a[j] == b[i]) break;}if (j==n) printf("NO\n");else printf("YES\n");}} } 原文:https://www.cnblogs.com/acoccus/p/10074074.html

算法笔记--圆方树【代码】

模板:struct Circle_Square_Tree {const static int N = 2e4 + 10;vector<pair<int, LL> > G[N];int dp[N], anc[N][18], n;LL dis[N], cir[N]; //环的大小bool vis[N];//记录到方点的最短距离是否经过回边vector<pii> g[N];int dfn[N], low[N], fa[N], cnt, tot;int a[N];inline void solve(int u, int v, int d) {int cnt = 0;LL sum = d;for (int i = v; i != u; i = fa[i]) sum += dis[i] - dis[fa[i]], a[++cnt] = i;a[++cnt]...

算法笔记 第10章 提高篇(4) --图算法专题 学习笔记【代码】【图】

10.1 图的定义和相关术语图由顶点和边组成,每条边的两端都必须是图的两个顶点。而记号G(V,E)表示图G的顶点集为V、边集为E。一般来说,图可分为有向图和无向图。有向图的所有边都有方向,即确定了顶点到顶点的一个指向;而无向图的所有边都是双向的,即无向边所连接的两个顶点可以互相到达。 10.2 图的存储一般来说,图的存储方式有两种:邻接矩阵和邻接表。10.2.1 邻接矩阵令二维数组G[N][N]的两维分别表示图的顶点标号,即如果G[...