C/C++,数字序列-查找第n个鲍姆甜序列(Baum Sweet Sequence)的计算方法与源程序
C/C++,数字序列——查找第n个鲍姆甜序列(Baum Sweet Sequence)的计算方法与源程序
C#图像处理OpenCV开发指南(CVStar,07)-通用滤波(Filter2D)的实例代码
C#图像处理OpenCV开发指南(CVStar,07)——通用滤波(Filter2D)的实例代码
C/C++,组合算法-K人活动选择问题(Activity-Selection-Problem)的源程序
C/C++,组合算法——K人活动选择问题(Activity-Selection-Problem)的源程序
1 活动选择问题
Activity-Selection-Problem with k persons
给定两个大小为 N 的数组S[]和E[]表示商店的开始和结束时间,以及一个整数值 K 表示人数,
任务是找出如果他们基于以下条件最佳地访问每个商店,他们总共可以访问的商店的最大数量:
(1)一家商店只能被一个人光顾;
(2)一个人不能去另一家商店,如果它的时间与它冲突;
Activity Selection problem is a approach of selecting non-conflicting tasks based on start and end time and can be solved in O(N logN) time using a simple greedy approach. Modifications of this problem are complex and interesting which we will explore as wel
C#,数值计算-计算实对称矩阵所有特征值和特征向量的雅可比(Jacobi)方法与源程序
C#,数值计算——计算实对称矩阵所有特征值和特征向量的雅可比(Jacobi)方法与源程序
C#图像处理OpenCV开发指南(CVStar,08)-边缘识别之Sobel算法的实例代码
C#图像处理OpenCV开发指南(CVStar,08)——边缘识别之Sobel算法的实例代码
1 边缘识别Sobel算法
边缘识别的作用也是提取一些特征点(边缘点)。
关于Sobel的文章铺天盖地,就不多价绍了。
1.1 函数原型
void Cv2.Sobel(src,dst,ddepth,dx,dy,ksize,scale,delta,borderType)
1.2 参数说明
src 代表原始图像。
dst 代表目标图像。
ddepth 代表输出图像的深度。CV_16S
dx 代表x方向上的求导阶数。
dy 代表y方向上的求导阶数。
ksize 代表Sobel核的大小。该值为-1时,则会使用 Scharr 算子进行运算。
scale 代表计算导数值时所采用的缩放因子,默认情况下该值是1,是没有缩放的。
delta 代表加在目标图像dst上的值,该值是可选的,默认为0。
borderType 代表边界样式。
C/C++,优化算法-使用遗传算法的旅行商问题(traveling-salesman-problem)的源程序
C/C++,优化算法——使用遗传算法的旅行商问题(traveling-salesman-problem)的源程序
C/C++,图算法-布伦特循环检测算法(Brent‘s cycle detection algorithm)的源程序
C/C++,图算法——布伦特循环检测算法(Brent‘s cycle detection algorithm)的源程序
C/C++,数值计算-快速幂(Quick Pow)的几种算法源代码
C/C++,数值计算——快速幂(Quick Pow)的几种算法源代码
C#,数值计算,计算实非对称矩阵的所有特征值和特征向量,简化为Hes-senberg形式,然后进行QR迭代
C#,数值计算,计算实非对称矩阵的所有特征值和特征向量,简化为Hes-senberg形式,然后进行QR迭代
C#图像处理OpenCV开发指南(CVStar,09)-边缘识别之Scharr算法的实例代码
C#图像处理OpenCV开发指南(CVStar,09)——边缘识别之Scharr算法的实例代码
1 边缘识别之Scharr算法
算法文章很多,不再论述。
1.1 函数原型
void Cv2.Scharr(src,dst,ddepth,dx,dy,scale,delta,borderType)
1.2 参数说明
src 代表原始图像。
dst 代表目标图像。
ddepth 代表输出图像的深度。CV_16S
dx 代表x方向上的求导阶数。
dy 代表y方向上的求导阶数。
scale 代表计算导数值时所采用的缩放因子,默认情况下该值是1,是没有缩放的。
delta 代表加在目标图像dst上的值,该值是可选的,默认为0。
borderType 代表边界样式。
C/C++,树算法-二叉树(BTree)的基本数据结构
C/C++,树算法——二叉树(BTree)的基本数据结构
C/C++,数字序列-计算伯努利数(Bernoulli Number)的计算方法与源程序
C/C++,数字序列——计算伯努利数(Bernoulli Number)的计算方法与源程序
C/C++,树算法-二叉树的插入(Insert)算法之源程序
C/C++,树算法——二叉树的插入(Insert)算法之源程序
C/C++,树算法-二叉树(BTree)的基本数据结构
C/C++,树算法——二叉树(BTree)的基本数据结构
C/C++,贪婪算法-博鲁夫卡算法(Boruvka)的计算方法与源程序
C/C++,贪婪算法——博鲁夫卡算法(Boruvka)的计算方法与源程序
C/C++,优化算法-双离子推销员问题(Bitonic Travelling Salesman Problem)的计算方法与源
C/C++,优化算法——双离子推销员问题(Bitonic Travelling Salesman Problem)的计算方法与源代码
C#,图论与图算法,图最短路径的迪杰斯特拉(Dijkstra)算法与源代码
C#,图论与图算法,图最短路径的迪杰斯特拉(Dijkstra)算法与源代码
1 图的最短路径
给定一个图和图中的源顶点,查找从源到给定图中所有顶点的最短路径。
Dijkstra的算法与Prim的最小生成树算法非常相似。像Prim的MST一样,我们生成一个以给定源为根的SPT(最短路径树)。我们维护两个集合,一个集合包含最短路径树中包含的顶点,另一个集合包含最短路径树中尚未包含的顶点。在算法的每个步骤中,我们都会找到另一个集合(尚未包含的集合)中的顶点,该顶点与源之间的距离最小。
下面是Dijkstra算法中使用的详细步骤,用于查找从单个源顶点到给定图中所有其他顶点的最短路径。
2 算法
1) 创建一个集sptSet(最短路径树集),用于跟踪最短路径树中包含的顶点,即计算并最终确定其与源的最小距离。最初,此集合为空。
2) 为输入图形中的所有顶点指定距离值。将所有距离值初始化为无穷大。将源顶点的距离值指定为0,以便首先拾取该顶点。
3) 而sptSet不包括所有顶点
….a) 拾取sptSet中不存在且具有最小距离值的顶点u。
….b) 包括u到sptSet。
….c)
C/C++,图算法-Dinic最大流量算法
C/C++,图算法——Dinic最大流量算法
C/C++,图算法-有向图的海尔霍尔泽(Hierholzer)算法及其源程序
C/C++,图算法——有向图的海尔霍尔泽(Hierholzer)算法及其源程序
C/C++,哈夫曼编码的C源程序
C/C++,哈夫曼编码的C源程序
C/C++,迭代深化搜索(IDS)或迭代深化深度优先搜索(IDDFS)的源程序
C/C++,迭代深化搜索(IDS)或迭代深化深度优先搜索(IDDFS)的源程序
C/C++,图形学-朱莉娅分形集(Julia Fractal)的计算方法与源程序
C/C++,图形学——朱莉娅分形集(Julia Fractal)的计算方法与源程序
C/C++,树算法-K叉树(k-dimensional-tree)的计算方法与源代码
C/C++,树算法——K叉树(k-dimensional-tree)的计算方法与源代码
C/C++,树算法-最小K叉树的计算方法与源程序
C/C++,树算法——最小K叉树的计算方法与源程序
C/C++,树算法-K叉树的修剪(删除)算法及其源程序
C/C++,树算法——K叉树的修剪(删除)算法及其源程序
C/C++,图算法-使用K近邻算法查找未知点组的计算方法与源程序
C/C++,图算法——使用K近邻算法查找未知点组的计算方法与源程序
C/C++,为给定文本构建LCP阵列的计算方法与源程序
C/C++,为给定文本构建LCP阵列的计算方法与源程序
C/C++,判断索引超出了数组的界限的Sunday算法及其源代码
C/C++,判断索引超出了数组的界限的Sunday算法及其源代码
C/C++,动态 DP 问题的计算方法与源程序
C/C++,动态 DP 问题的计算方法与源程序
C/C++,FEISTDLIB的部分源代码
C/C++,FEISTDLIB的部分源代码
C#,电话数字键盘问题(Mobile Numeric Keypad problem)的算法与源代码
C#,电话数字键盘问题(Mobile Numeric Keypad problem)的算法与源代码
电话数字键盘问题
提供移动数字键盘。您只能按向上、向左、向右或向下至当前按钮的按钮。不允许您按最下面一行的角点按钮(即.*和#)。
移动键盘
给定一个数N,找出给定长度的可能数。
示例:
对于N=1,可能的数字数为10(0、1、2、3、…、9)
对于N=2,可能的数字数为36
可能的数字:00、08、11、12、14、22、21、23、25等等。
如果我们从0开始,有效数字将是00、08(计数:2)
如果我们从1开始,有效数字将是11、12、14(计数:3)
如果我们从2开始,有效数字将是22、21、23、25(计数:4)
如果我们从3开始,有效数字将是33、32、36(计数:3)
如果我们从4开始,有效数字将是44,41,45,47(计数:4)
如果我们从5开始,有效数字将是55,54,52,56,58(计数:5)
C#,布尔可满足性问题(Boolean Satisfiability Problem)算法与源代码
C#,布尔可满足性问题(Boolean Satisfiability Problem)算法与源代码
1 布尔可满足性问题
布尔可满足性问题
布尔可满足性或简单的SAT是确定布尔公式是可满足还是不可满足的问题。
可满足:如果布尔变量可以赋值,使得公式为真,那么我们说公式是可满足的。
不可满足:如果无法指定此类值,则我们称公式不可满足。
2 合取范式(CNF)或也称为和积(POS)
为了更好地理解这一点,首先让我们看看什么是合取范式(CNF)或也称为和积(POS)。
CNF:CNF是子句的连词(AND),其中每个子句都是析取(OR)。
现在,2-SAT将SAT问题限制为仅表示为CNF的布尔公式,每个子句只有2个项(也称为2-CNF)。
示例:F=(A\u 1\vee B\u 1)\wedge(A\u 2\vee B\u 2)\wedge(A\u 3\vee B\u 3)\wedge。。。。。。。\楔块(A\u m\vee B\u m)
因此,2-可满足性问题可以表述为:
给定每个子句只有2个项的CNF,是否可以将这些值分配给变量,以使CNF为真?
C#,回文分割问题(Palindrome Partitioning Problem)算法与源代码
C#,回文分割问题(Palindrome Partitioning Problem)算法与源代码
1 回文串
“回文串”是一个正读和反读都一样的字符串,初始化标志flag=true,比如“level”或者“noon”等等就是回文串。
2 回文分割问题
给定一个字符串,如果该字符串的每个子字符串都是回文的,那么该字符串的分区就是回文分区。
例如,“aba | b | bbabb | a | b | aba”是“abababababa”的回文分区。
确定给定字符串的回文分区所需的最少切割。
例如,“ababababababa”至少需要3次切割。
这三个分段是“a | babbab | b | ababa”。
如果字符串是回文,则至少需要0个分段。
如果一个长度为n的字符串包含所有不同的字符,则至少需要n-1个分段。
C#,煎饼排序问题(Pancake Sorting Problem)算法与源代码
C#,煎饼排序问题(Pancake Sorting Problem)算法与源代码
煎饼排序问题
给定一个未排序的数组,任务是对给定数组进行排序。您只能在阵列上执行以下操作。
翻转(arr,i):将数组从0反转为i
示例:
输入:arr[]={23、10、20、11、12、6、7}
输出:{6、7、10、11、12、20、23}
输入:arr[]={0,1,1,0,0}
输出:{0,0,0,1,1}
方法:与传统排序算法不同,传统排序算法试图以尽可能少的比较进行排序,其目标是以尽可能少的反转对序列进行排序。
这个想法是做一些类似于选择排序的事情。我们一个接一个地将最大元素放在末尾,并将当前数组的大小减少一个。
以下是详细步骤。设给定数组为arr[],数组大小为n。
对每个curr_size执行以下操作:
(1)查找arr[0到curr_szie-1]中最大元素的索引。让索引为“mi”;
(2)翻转(arr,mi);
(3)翻转(arr,curr_size–1);
C#,动态规划的集合划分问题(DP Partition problem)算法与源代码
C#,动态规划的集合划分问题(DP Partition problem)算法与源代码
1 动态规划问题中的划分问题
动态规划问题中的划分问题是确定一个给定的集是否可以划分为两个子集,使得两个子集中的元素之和相同。
动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产、军事以及自动化控制等领域,并在背包问题、生产经营问题、资金管理问题、资源分配问题、最短路径问题和复杂系统可靠性问题等中取得了显著的效果。
2 应用示例
动态规划问题中的划分问题示例:
arr[]={1,5,11,5}
输出:真
数组可以划分为{1、5、5}和{11}
arr[]={1,5,3}
输出:false
数组不能划分为等和集。
以下是解决此问题的两个主要步骤:
1) 计算数组的和。如果sum为奇数,则不可能有两个sum相等的子集,因此返回false。
2) 如果数组元素
C#,排列组合的堆生成法(Heap’s Algorithm for generating permutations)算法与源代码
C#,排列组合的堆生成法(Heap’s Algorithm for generating permutations)算法与源代码
排列组合的堆生成法
堆生成算法用于生成n个对象的所有组合。其思想是通过选择一对要交换的元素,在不干扰其他n-2元素的情况下,从先前的组合生成每个组合。
下面是生成n个给定数的所有组合的示例。
示例:
输入:1 2 3
输出:1 2 3
2 1 3
3 1 2
1 3 2
2 3 1
3 2 1算法
算法生成(n-1)!前n-1个元素的排列,与其中每个元素相邻的最后一个元素。这将生成以最后一个元素结尾的所有置换。
如果n为奇数,则交换第一个和最后一个元素,如果n为偶数,则交换第i个元素(i是从0开始的计数器)和最后一个元素,并重复上述算法,直到i小于n。
在每次迭代中,算法将生成以当前最后一个元素结尾的所有组合。
C#,老鼠迷宫问题的回溯法求解(Rat in a Maze)算法与源代码
C#,老鼠迷宫问题的回溯法求解(Rat in a Maze)算法与源代码
老鼠迷宫问题
迷宫中的老鼠,作为另一个可以使用回溯解决的示例问题。
迷宫以块的N×N二进制矩阵给出,其中源块是最左上方的块,即迷宫[0][0],目标块是最右下方的块,即迷宫[N-1][N-1]。老鼠从源头开始,必须到达目的地。老鼠只能朝两个方向移动:向前和向下。
在迷宫矩阵中,0表示该块是死胡同,1表示该块可用于从源到目标的路径。请注意,这是典型迷宫问题的简单版本。例如,更复杂的版本可以是rat可以在4个方向上移动,而更复杂的版本可以具有有限的移动次数。老鼠迷宫问题的回溯法求解
(1)创建一个解决方案矩阵,最初用0填充。
(2)创建一个递归函数,该函数采用初始矩阵、输出矩阵和rat(i,j)的位置。
(3)如果位置超出矩阵或位置无效,则返回。
(4)将位置输出[i][j]标记为1,并检查当前位置是否为目标位置。如果到达目的地,打印输出矩阵并返回。
(5)递归调用位置(i+1,j)和(i,j+1)。
(6)取消标记位置(i,j),即输出[i][j]=0。
C#,数值计算,解微分方程的龙格-库塔二阶方法与源代码
C#,数值计算,解微分方程的龙格-库塔二阶方法与源代码
微分方程
含有导数或微分的方程称为微分方程,未知函数为一元函数的微分方程称为常微分方程。
微分方程的阶数
微分方程中导数或微分的最高阶数称为微分方程的阶数。
微分方程的解
使得微分方程成立的函数称为微分方程的解。
微分方程的特解
微分方程的不含任意常数的解称为微分方程的特解。
微分方程的通解
所含相互独立的任意常数的个数与微分方程的阶数相等的微分方程的解称为微分方程的通解。
C#,数值计算,用割线法(Secant Method)求方程根的算法与源代码
C#,数值计算,用割线法(Secant Method)求方程根的算法与源代码
割线法
割线法用于求方程 f(x) = 0 的根。它是从根的两个不同估计 x1 和 x2 开始的。这是一个迭代过程,包括对根的线性插值。如果两个中间值之间的差值小于收敛因子,则迭代停止。
亦称弦截法,又称线性插值法.一种迭代法.指用割线近似曲线求方程根的2步迭代法.此法用通过点(xk,f(xk))及(xk-1,f(xk-1))的割线
近似曲线y=f(x),用割线的根作为方程根的新近似xk+1,从而得到方程求根的割线法迭代程序
( k=1,2,…,n),
其中x0,x1为初始近似.若f(x)在根x*的邻域内有二阶连续导数,且f′(x*)≠0,则当x0,x1在x*邻域内时,割线法收敛于x*,其收敛阶为
C#,蛇梯问题(Snake and Ladder Problem)的算法与源代码
C#,蛇梯问题(Snake and Ladder Problem)的算法与源代码
蛇梯问题
Snake and Ladder Problem
给定一个蛇梯板,找出从源单元格或第一个单元格到达目标单元格或最后一个单元格所需的最小掷骰次数。基本上,玩家可以完全控制掷骰子的结果,并希望找出到达最后一个单元格所需的最小掷骰次数。
如果玩家到达的牢房是梯子的底部,玩家必须爬上梯子,如果到达的牢房是蛇的嘴,则必须在不掷骰子的情况下下下到蛇的尾巴。
例如,考虑所示的电路板,从单元1到达单元30所需的最小掷骰子次数为3。
以下是步骤:
a) 首先掷两个骰子到3号牢房,然后爬到22号牢房
b) 然后掷6到28。
c) 最终通过2达到30。
还有其他解决方案,如(2,2,6),(2,4,4),(2,3,5)。。等
其思想是将给定的蛇梯板视为顶点数等于板中单元数的有向图。问题归结为在图中寻找最短路径。如果接下来的6个顶点没有蛇或阶梯,则图的每个顶点都有一条到下6个顶点的边。如果接下来的六个顶点中有任何一个具有蛇或阶梯,则当前顶点的边将到达阶梯的顶部或蛇的尾部。由于所有边的权重相等,我们可以