基础算法
qq_41967508
这个作者很懒,什么都没留下…
展开
-
逻辑回归的矩阵实现
矩阵实现优于数组实现矩阵实现一步到位,数组实现时有多步分开的运算,会损失精度temp是矩阵计算的差值temp1是数组计算的差值,再求和两者存在差距数组计算出来的准确度更低原创 2020-06-21 23:59:50 · 570 阅读 · 0 评论 -
线性回归
不做标准化的随机梯度下降:问题多多.做标准化的随机梯度下降:未标准化的批量梯度下降:10/97batch未标准化的批量梯度下降:50/97batch未标准化的批量梯度下降:90/97batch未标准化的批量梯度下降:96/97batch...原创 2020-06-19 00:35:52 · 102 阅读 · 0 评论 -
天坑
theta系数一定要是浮点数,不然恒为零原创 2020-06-17 20:29:18 · 187 阅读 · 0 评论 -
标准化
标准化收敛更快,且无直线下降归一化时应该注意,标准差为0,比如x全为1的那列def featureNormalize(X): for i in range(X.shape[1]): mu = np.average(X[:,i],axis=0) sigma =np.std(X[:,i],axis=0,ddof=1) # 第一列都是1,sigma为0,除0为nan if isgma != 0:原创 2020-06-17 17:36:17 · 213 阅读 · 0 评论 -
归并排序&基数排序
合并两段排序需要复制一个数组方便操作,但大小应该选大的 ,错误示范://int* b = new int[high-low+1];*如果low=7,high=9,则b数组大小为3,但是随后访问b[7]正确: int b = new int[high];归并排序是递归过程,应该用if而非while //while(low<high){ 不是while是if空间复杂度...原创 2020-03-30 00:35:14 · 112 阅读 · 0 评论 -
选择排序
堆排序不用记录孩子中的最大值,记录最大结点序号即可,交换也是根据序号来交换的原创 2020-03-26 16:40:06 · 76 阅读 · 0 评论 -
选择排序
快排记得写终止条件,因为是递归形式,否则无限循环序号是严格小于,确保退出时low=high元素间是<=,>=否则两个互相抵消#include<iostream>using namespace std;void bubble(int a[], int n){ for(int i=1;i<n;i++){//比较n个数n-1次即可 int flag = ...原创 2020-03-26 12:26:50 · 75 阅读 · 0 评论 -
prim生成树
和dijsktra很像对比if(min_weight[u]+g.edges[u][i] < min_weight[i] && !vis[i]){***注意与dijsktra区分if(g.edges[min_arc][i] < min_weight[i] && !vis[i]){struct MGraph{ char vertex[maxSize]...原创 2020-03-22 23:41:37 · 179 阅读 · 0 评论 -
最短路径
dijkstra注意:c++数组初始化//C/C++不支持数组整体赋值,可以在声明数组时整体初始化。//无论数组有多大,全部初始化为0的操作很简单,如int a[3000]={0};就可以将a的3000个元素全部置0;//若要赋其他值,例如全部赋值为7,写成int a[3000]={7};只有a[0]=7;void Dijkstra(MGraph g, int u){//u为源起点的...原创 2020-03-22 12:11:49 · 84 阅读 · 0 评论 -
BFS
void BFSg(MGraph g, bool visit[],int u){ queue<int> q; q.push(u); //注意BFS不像DFS有回退的情况,而是一层一层,所以不是递归算法。应用队列的一般都是for循环 while(!q.empty()){ u = q.front();//出队 q.pop(); visit[u]=true; pr...原创 2020-03-20 11:58:00 · 75 阅读 · 0 评论 -
dfs
这样每个子图第一个节点不会被访问正确的位置原创 2020-03-01 19:50:45 · 83 阅读 · 0 评论 -
树的递归思想
后序遍历void postorder(node* root){ if(root == NULL) return; postorder(root->lchild); postorder(root->rchild); cout<<root->data; }获取树高//获取树的高度int gethigh(node* root){ if(!roo...原创 2020-02-27 11:59:47 · 158 阅读 · 0 评论 -
常见错误
void judgeAVL0(node* root, int h, int balance){ if(!root){ h = 0; balance = 1; } int h1,h2,b1,b2; judgeAVL0(root->lchild, h1, b1); judgeAVL0(root->rchild, h2, b2); if(abs(h1-h2)>1...原创 2020-02-27 11:55:35 · 76 阅读 · 0 评论 -
创建哈夫曼树
原因:构造函数传的是值,所以一出了构造函数原地址变乱码改进:构造函数传地址直接使用“Shift+F11”直接跳到断点new A和new A()一样没有区别,new A()显式的调用构造函数,new A隐式的调用构造函数,都是调用A():a(1),b(2){cout<<“A的构造函数被执行”<<endl;};假如calss A还有一个构造函数A(int ...原创 2020-02-26 17:23:28 · 150 阅读 · 0 评论 -
stl priority_queue
小点C++ “greater”: 未声明的标识符错误解决方案:在头文件中加入#include即可解决priority_queue使用介绍cpp priority_queue<int, vector<int>, less<int>> q;等价于cpp priority_queue<int> q;均为大则优先级高使用top()获得优...原创 2020-02-23 20:29:18 · 189 阅读 · 0 评论 -
c++静态方法调用
class Test{public: static void staticMethod(int count);}; 调用:Test::staticMethod(0);注意public后加:调用时类名加::原创 2020-02-19 22:57:11 · 833 阅读 · 0 评论 -
链表
#include using namespace std;typedef int ElemType ;struct LNode{ElemType data;LNode* next;};void createlistR(LNode* &l, int a[], int n){//尾插法LNode* r = (LNode*)malloc(sizeof(LNode));//创建头结...原创 2020-02-13 16:31:22 · 120 阅读 · 0 评论 -
通过swap()看待*&
void swap(int* a,int* b)//错误b未改变{ int *temp = a;//指针temp=指针a *a = *b;//a内容为b *b = *temp;//b内容为temp的内容即a的内容 cout<<*b<<"666"<<endl;}指针需要初始化!!!void swap(int* a,int* b)//报错,指针未初...原创 2020-02-09 16:43:54 · 80 阅读 · 0 评论 -
创建结点记得指针置空
node* p = (node*)malloc(sizeof(node)); p->data = ch; root=p;node* p = (node*)malloc(sizeof(node)); p->data = ch; p->lchild = NULL;//不可或缺 p->rchild = NULL; root=p;原创 2020-02-09 16:29:59 · 119 阅读 · 0 评论 -
heap
#include<cstdio>void adjust(int a[],int i, int n){ a[0]=a[i];//存开头,此后每次比较都和a【0】比 for(int k=2*i;k<=n;k*=2)//k为左孩子初始时int k=2*i;每次循环中k*=2 { if(a[k+1]>a[k]&&k+1<=n)//选出大孩子 ...原创 2020-02-03 17:28:15 · 94 阅读 · 0 评论 -
冒泡排序
#include <stdio.h>//void bubble(int a[], int n)//{// for(int i=n-2;i>=0;i--) //for(int i=n;i>1;i--)// {// for(int j=0;j<=i;j++)//直接让退出条件为:j=i,最大为a[j+1]即a[i+1],所以外层循环i=n-2 ×错误,外层2...原创 2020-01-08 21:39:31 · 88 阅读 · 0 评论 -
折半插入排序
#include <stdio.h>void BiSeekInsertSort(int a[], int n){ //折半插入排序int high,low,mid;for(int i=1;i<n;i++){high=i-1;low=0;while(low<=high) //得到l要插入元素的数...原创 2020-01-06 22:48:53 · 94 阅读 · 0 评论