C++ 算法 算法概念算法是特定问题求解步骤的描述在计算机中表现为指令的有限序列算法是独立存在的一种解决问题的方法和思想。对于算法而言,语言并不重要,重要的是思想。 算法和数据结构区别数据结构只是静态的描述了数据元素之间的关系高效的程序需要在数据结构的基础上设计和选择算法程序=数据结构+算法 总结: 算法是为了解决实际问题而设计的 数据结构是算法需要处理的问题载体 数据结构与算法相辅相成 算法特...
本文参考自这篇文章,由于其贴出来的代码运行效率较低而且不太符合本人的想法和习惯,所以对其进行了算法的重新设计和代码的重写。 所谓图像的连通域,指的是图像上像素点值相同或者相近的点两两相邻接所组成的一块区域。而对于邻接,有四邻接和八邻接两种,如下:四邻接 八邻接 上图所示的‘O‘与‘X’相邻接,本文采取的是4邻接方式。 在查找图像连通域的时候,一般都需要经过一个二值化的过程,将图像的像素值简化成非...
(期末考试快到了,所以比较粗糙,请各位读者理解。。)一、 概念DBSCAN是一种产生划分聚类的基于密度的聚类算法,簇的个数由算法自动地确定。低密度区域中的点被视为噪声而忽略,因此DBSCAN不产生完全聚类。二、 伪代码1 将所有点标记为核心点、边界点和噪声点。2 删除噪声点。3 为距离在Eps之内的所有核心点之间赋予一条边。4 每组连通的核心点形成一个簇。5 将每个边界点指派到一个与之关联的核心点的簇中。...
聚类是一种无监督的学习,它将相似的对象归到同一个簇中。它有点像全自动分类(类别体系是自动构建的)。聚类方法几乎可以应用于所有对象,簇内的对象越相似,聚类的效果越好。本文要介绍一种称为K-均值(K-means)聚类的算法。之所以称之为K-均值是因为它可以发现k个不同的簇,且每个簇的中心采用簇中所含值的均值计算而成。在介绍K-均值之前,先讨论一席簇识别(cluster identification)。簇识别给出聚类结果的含义。假定有一些...
最短路是个老问题了,大神们留下很多文档但是很多都是针对算法使用一些固定大小的数组进行数据存储在实际应用中受到限制,这里自己练习一下,主要用了一些c++的stl,减少了固定长度数组的依赖,换一种写法试图提高可读性。有兴趣的同学可以试着将map/set 换成 hash_set/hash_map 应该能获得更高的效率,对于稀疏表,内存还是能省不少的。 参考文献: http://www.cnblogs.com/hxsyl/p/3270401.html 1 /***************************...
一文读懂C++ String类在算法竞赛中的常见用法string 相较于C语言的字符数组可方便太多了,在算法竞赛中能大大节省我们的时间。以下是我在刷题中会使用到的常见String用法。注释都写好了。#include <iostream>
#include <string>
using namespace std;
int main(){//1、字符串拼接string s1 = "Hello";string s2 = "World!";string s3 = s1 + s2;cout<< s3 <<endl; //输出为HelloWorld!s3.append("123"); //字符串自加cout<< s3 <<e...
#include <bits/stdc++.h>
usingnamespace std;
/*** FIFO算法的实现:其实是可以采用双端队列,然后限制一下* 双端队列的长度,根据我的限制应该是4。对于查询是否出现* 在这个队列里面,我们可以采用一个数组标记是否有存在。** 测试数据如下
16 4
0 1 2 4 3 4 5 1 2 5 1 2 3 4 5 6* **/struct FIFO{int len, m;///长度, len - 总访问数; m - 分配的物理块数int arr[105];///存储访问页面的编号deque<int>que;int vids[15];///标...
源代码:#include<cstdio>
#include<cstring>
#include<iostream>
usingnamespace std;
string s1,s2;
int m,n,k(0),next[1001]; //在Next数组中,存储的是匹配失败后,上一位应该跳跃到的节点编号。 int main()
{getline(cin,s1);getline(cin,s2);m=s1.size();n=s2.size();next[0]=0; //第一个字符之前,不存在可比较的字符。for (int a=1;a<n;a++) //在C++中,字符串实际上以开头为0的、字符数组的形式存在。 {while (k>0&&s...
struct BinaryTreeNode
{int m_nValue;BinaryTreeNode* m_pLeft;BinaryTreeNode* m_pRight;
};
//递归前序遍历
void PreOrder(BinaryTreeNode* pNode)
{if(pNode!=NULL){cout<<pNode->m_nValue<<endl;PreOrder(pNode->m_pLeft);PreOrder(pNode->m_pRight);}
}
//非递归前序遍历
/*
根据前序遍历访问的顺序,优先访问根结点,然后再分别访问左孩子和右孩子。
即对于任一结点,其可看做是根结点,因此可以直接访问,访问完之后,
若其...
磁盘调度在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列,常用的磁盘调度算法有以下四种:先来先服务算法(FCFS),最短寻道时间优先算法(SSTF),扫描算法(SCAN),循环扫描算法(CSCAN)代码变量声明:1 vector<int> TrackOrder; //磁道初始序列 在函数中简写为 t2 vector<int>...
//****************************************************************************************************
//
// 求一个数组的最长递减子序列 - C++ - by Chimomo
//
// 题目: 求一个数组的最长递减子序列,比方{8, 14, 6, 2, 8, 14, 3, 2, 7, 4, 7, 2, 8, 101, 23, 6, 1, 2, 1, 1}的最长递减子序列为{14。8,3。2,1}。
//
// Answer: Scan from left to right, maintain a decreasing sequence. For each number, binary ...
冒泡排序算法C++#include <iostream>
using namespace std;
template<typename T>
//整数或浮点数皆可使用
void bubble_sort(T arr[], int len)
{int i, j; T temp;for (i = 0; i < len - 1; i++)for (j = 0; j < len - 1 - i; j++)if (arr[j] > arr[j + 1]){temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}
}
int main()
{int arr[] = { 61, 17, 29, 22, 34, 60, 72, 21, 50, 1, 62 };int len = (int) sizeof(arr) / siz...
1 #include <iostream>2usingnamespace std;3int BubbleSort(int A[],int n);4int OutPut(int A[],int n);5int main()6{7int A[]={5,1,3,2,4};8 BubbleSort(A,5);9 OutPut(A,5);
10return0;
11}
1213int BubbleSort(int A[],int n)
14{
15for(int i=0;i<n-1;i++)
16 {
17for(int j=i+1;j<n;j++)
18 {
19if(A[i]>A[j])
20 {
21int temp=A[i];
22 A[i]=A[j];
23 A[j]=...
源代码:#include<cstdio>#include<cstring>int m,n,i[1001][1001],h[1001];bool f[1001]={0};long long ans(0);int main(){ memset(i,0x7f,sizeof(i)); memset(h,0x7f,sizeof(h)); //将数组初始化,定义为最大值,为下面查找最小值做铺垫。 h[1]=0; //从编号为1的节点开始查找。 scanf("%d%d",&n,&m); for (int a=1;a<=m;a++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); i[x][y]=i[y][x]=z; //注意这是无向图。 } for (int a=...
摘要: 讲一讲这个程序遇到的错误 1.就是最后一个点,当他只有一个点的时候,他就是吧后面的全部填充,这是因为标志填充算法一定要有两个边界才可以,我解决这个问题的办法是错开一个点 2.就是当有三个点的时候,第2和3点中间部分就不会被填充了,以上的解决办法就是错开一点,也就是把第二个点变成两个点 3,使用中点画圆方法画的圆,在这个算法中,由于他选择的点有可能不是下一个点,而是跟当前点平行的那一个,这个时候他就会填...