数据结构与算法
文章平均质量分 85
大知无涯者
qq 2216526509
展开
-
堆排序
堆排序代码#include "stdafx.h"#include <stdio.h>#include <time.h>#include <stdlib.h>#define MAX 100#define MAX 100void HEAP_UP(int a[],int n)//堆上{ int i,x; bo原创 2019-03-14 15:49:34 · 95 阅读 · 0 评论 -
用级数进行对数计算,基于ln(x)求loga(b)
泰勒展开式ln(x+1) =x - x ^ 2 / 2 + x ^ 3 / 3 - x ^ 4 / 4 + …(|x|<=1,x!=-1)算法原理ln(x+1)要求 0<x+1<=2所以要将一般数作相应变换ln(x)分解 x=a*2^bln(x)=ln(a)+ln(2^b)=ln(a)+bln(2)此时a满足 0<a<=2 可以使用级数计算收敛...原创 2019-05-05 12:50:55 · 2662 阅读 · 0 评论 -
欧拉余数定理通解,求A的B次幂模C的值( A^B mod C)
#欧拉余数定理算法对于 A^B mod C1.如果 A ,C 不互质(互质:两个数做因式分解,公共因子只有1)通过约分使得新的C1与A互质,如果C1与A不互质,则重复此步骤。记录的约数积Y 和商S积2 如果 A 大于 C ,则A = A %C3 求C的欧拉函数值euler4 如果B不小于euler, B=B%euler5 计算 e=A^B ,此时A,B已经较小了6 A^...原创 2019-04-29 18:40:24 · 1717 阅读 · 0 评论 -
数字转化成中文(int)
将一个正整数转化成中文(0~2^32-1)例:1000031,转换为list 一 零 零 零 零 三2 ,插入单位 一十 零个 万 零千 零百 零十 三个3 ,去零和零的单位 一十 万 零 三个4 ,去除单位 “个” 一十 万 零 三检验数(0)零(100003)一十万零三(8543332...原创 2019-04-30 17:40:13 · 1807 阅读 · 2 评论 -
直线拟合最小二乘法
数据x=(1,2,3,4,5)y = (1,1.5,3,4.5,5)算法结果R语言运行结果算法原理x的均值:xp=sum(x1+x2+x3+…+xn)/ny的均值 :yp=sum(y1+y2+y3+…+yn)/nx的平方差之和:lxx=sum( (xi-xp) ^ 2 )协方差之和lxy=sum( (xi-xp)*(yi-yp) )拟合直线 y’=kx+bk=...原创 2019-05-09 15:53:16 · 3980 阅读 · 0 评论 -
求超大斐波那契数列,迭代法,通项公式法
斐波那契数列定义指的是这样一个数列:1、1、2、3、5、8、13、21、34从第3项开始,后一项都等于前两项之和。最简单的算法 public static int fibonacci(int n){ int a=1; int b=1; for(int i=3;i<=n;i++) { int c=b; b=a+b; a=c; } return b;...原创 2019-05-09 17:35:33 · 1067 阅读 · 0 评论 -
希尔伯特曲线矩阵与动画
在上一篇中是通过缩小,旋转图形实现希尔伯特曲线,会受到整型运算干扰。这次将使用矩阵存储每个点的序号,完全避免整型运算的影响。希尔伯特曲线矩阵一阶希尔伯特曲线矩阵二阶希尔伯特曲线矩阵将二阶希尔伯特曲线矩阵分为4个象限能观察到4个象限的与一阶希尔伯特曲线矩阵有较大关系。比如第3象限为一阶希尔伯特曲线矩阵关于对角线 0 2对称或逆时针旋转90`第2象限为一阶希尔伯特曲线矩阵加4 ...原创 2019-05-14 16:59:19 · 1202 阅读 · 2 评论 -
不用库函数实现计算tan函数
算法代码#include "stdafx.h"#include &lt;stdio.h&gt;#define pai 3.14159265#define accuracy 0.000001double absolute(double x)//绝对值{ if(x&lt;0)x=-x; return x;}double Factorial(int x)//阶乘{ if(x=原创 2019-03-15 12:49:46 · 1376 阅读 · 0 评论 -
希尔伯特曲线
希尔伯特曲线希尔伯特曲线的构造方法:构造初始形状把已有图形缩小4倍(对应坐标缩小2倍),放在左下角将缩小图逆时针旋转90度放在右下角左右镜像对称用3条单位线段把4部分连接起来H为阶数,上图H=2等分数 :n=2^(H-1) -1最大边长:SIZE边长:eg=(1/2)^ H *SIZE边界宽度 : bd=eg/2希尔伯特曲线代码public class...原创 2019-05-13 17:12:37 · 9648 阅读 · 0 评论 -
全排列迭代算法
全排列全排列就是将数集按照一定的顺序排列起来比如1,2,3的全排列为:全排列的数量n个数的全排列1* 2* 3*…*(n-1)*n即n的阶乘全排列算法原理对1,2,3,4,5进行全排列:首先将数据排序第一个排列:1,2,3,4,5第二个排列:1,2,3,5,4第三个排列:1,2,4,3,5第四个排列:1,2,4,5,3第五个排列:1,2,5,3,4...原创 2019-06-06 18:00:29 · 1518 阅读 · 0 评论 -
一元多项式回归
设拟合多项式为φm(x)残差平方和用最小二乘来确定系数a0,a1,…,am,设残差平方和Q对ak求偏导数,并令其等于零,有写成矩阵形式为:(上面的方程是解别人的图,原址奉上:https://www.cnblogs.com/144823836yj/p/5524610.html )接下来就是解线性方程组增广矩阵法由于需要构造系数为1,将进行大量浮点运算,况且矩阵的元素肯能很大...原创 2019-06-07 13:31:00 · 3968 阅读 · 0 评论 -
rand5()产生rand7()
用只能产生 1 2 3 4 5 的随机数产生1 2 3 4 5 6 7将先后产生的两个随机数拼成一个两位数,共25个,每个数概率相等,分为每3个一组,就有7组数,余下4个垃圾丢弃,利用率84%。算法代码 public static int random5() { return (int) (1+Math.random()*5); } public static int random...原创 2019-05-04 14:36:43 · 835 阅读 · 0 评论 -
数据的有序拟合
前言最近看到一个帖子,是一个将数据的有序拟合的问题。有许多人留言讨论了,但并没有给出较为全面的证明。原贴如下:https://www.v2ex.com/t/442035通过半天的努力,得到了较为可观的结果。问题一个单链表,每个节点里存储都是正整数,现在是无序的,可能会有重复数字,可以修改每个节点里的值,达到以下两个目标:[1] 单链表变为有序的,从大到小,可以大于等于.[2] 修...原创 2019-04-24 11:21:21 · 245 阅读 · 0 评论 -
复数与复变函数基本运算(加,减,乘,除,exp,log,sin,cos,幂运算)
运算公式(这将是百度上关于复数运算较为全面的一篇)加法 (a+bi)+(c+di)=(a+c)+(b+d)i减法 (a+bi)+(c+di)=(a-c)+(b-d)i乘法 (a+bi)(c+di)=(ac-bd)+(bc+ad)i除法 (a+bi)/(c+di)=(ac+bd)/(c ^ 2 + d ^ 2) +((bc-ad)/(c ^ 2...原创 2019-05-01 18:07:05 · 11746 阅读 · 2 评论 -
插入排序
时间复杂度为O(n^2)算法代码#include "stdafx.h"#include <stdlib.h>#include <stdio.h>#include <time.h>#define N 65536*2//9600void INSERTIONSORT_recursion(short a[], int n){ int i; ...原创 2019-03-14 15:55:07 · 75 阅读 · 0 评论 -
背包问题
算法代码#include "stdafx.h"#include <stdio.h>#include <stdlib.h>const int N=4;//品种const int C=9;//容量int Knapsack_optimization(int S[],int P[],int OC[])//优化O(C)空间 容量C逆序遍历 S有序{ for(int...原创 2019-03-14 15:58:49 · 155 阅读 · 0 评论 -
最长公共子序列
算法代码/*最长公共子序列*/#include <stdio.h>#include <stdlib.h>const int N=10;const int M=12;int LCS_recursion(char A[],char B[],int i,int j)//递归{ if (i==0 || j==0) return 0; else { ...原创 2019-03-14 16:02:39 · 119 阅读 · 0 评论 -
二分法插入排序
算法代码/*MODINARYSEARCH插入改良版*/#include <stdio.h>#include <stdlib.h>#include <memory.h>#include <math.h>#include<time.h>#define MAX 11int MODBINARYSEARCH(int a[],in...原创 2019-03-14 16:05:26 · 285 阅读 · 0 评论 -
快速排序算法
算法复杂度 O(nlogn)快速排序算法代码#include <stdio.h>#include <stdio.h>#include <stdlib.h>#include<time.h>#define N 65536*2int SPLIT(int a[],int low ,int high)//分裂{ int i=low,x; a...原创 2019-03-14 16:11:19 · 151 阅读 · 0 评论 -
三着色问题
算法代码#include "stdafx.h"#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;const int N=5;int c[N+1]={0,};int map[N+1][N+1]={ {0,0,0,0,0,0}, {0,0,1,1,0,0}, {0,1,0,0,1,1}, {0,1,0,0,1,1}, {0,0原创 2019-03-14 16:23:17 · 2508 阅读 · 0 评论 -
最短路径问题
dijkstra算法代码#include "stdafx.h"#include<stdio.h>#include<stdlib.h>const int MAX=32767;const int N=6;int edge[N+1][N+1]={ {0,0,0,0,0,0,0}, {0,0,1,12,0,0,0}, {0,0,0,9,3,0,0}, {0...原创 2019-03-14 16:25:36 · 198 阅读 · 0 评论 -
冒泡排序算法
冒泡排序算法时间复杂度: O(n²)稳定性: 稳定排序算法(即排序前两个相同元素的相对位置在排序后不会改变)算法//冒泡排序void BUBBLESORT(int a[],int n){ int i, j, tmp; //外部循环执行n - 1次,因为内部循环比较每一次的最后一个元素 for (i = 0; i &amp;lt; n - 1; i++) //...原创 2019-03-13 13:34:29 · 212 阅读 · 0 评论 -
选择排序算法
选择排序算法时间复杂度: O(n^2)稳定性:不稳定的排序方法简单理解:每一次遍历找到一个最大元素并把它放到数组未排序段的末尾,即每次将一个元素安置好。算法//冒泡排序#include "stdafx.h"#include &lt;stdlib.h&gt;#include &lt;stdio.h&gt;#include &lt;time.h&原创 2019-03-13 14:02:39 · 133 阅读 · 0 评论 -
自下而上合并排序算法
归并排序算法时间复杂度: O(nlogn)稳定性: 稳定排序算法算法void Merge(short A[],int p,int q,int r)//合并{ short *B=new short[r-p+1]; int s=p,t=q+1,k=0; while ( (s&lt;=q) &amp;&amp; (t&lt;=r) ) { if(A[s]&lt;=A[t]...原创 2019-03-13 18:27:36 · 571 阅读 · 0 评论 -
子集算法
子集数量=2 ^ n = 1 (空集) + (2^n-1) (非空子集)算法原理:每个元素有两种处理方式,取或不取,共2 ^ n 种组合递归算法boolean[] done 为标志数组,表明对应位置元素取或不取public static void recursion(int[] root) { Objects.requireNonNull(root); boolean[] ...原创 2019-06-09 11:51:11 · 7995 阅读 · 1 评论