0%

2018年8月3日 下午3:54

这篇文章中有详细的分析步骤:
POJ2413 How many Fibs?【高精度】【二分】 - CSDN博客

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
// 数组长度的设置
// 第480个fibonacci数是101位。这是设置550*130的原因
const int MAXN = 550;
const int MAXNLEN = 130;
//注意:在使用数组模拟大数求和时,这里是int类型
// 一个一维数组 = 一个int类型的数
int F[MAXN][MAXNLEN];
//这个Fi的目的是为了保存出去前导0的数据
char Fi[MAXN][MAXNLEN],ans[MAXN];

void Fibo()
{
F[1][0] = 1;
F[2][0] = 2;
for(int i = 3; i <= 500; ++i)
{
for(int j = 0; j <= 110; ++j)
{
F[i][j] = F[i][j] + F[i-1][j] + F[i-2][j];
// 模拟进位
if(F[i][j] >= 10)
{
F[i][j+1] += F[i][j]/10;
F[i][j] %= 10;
}
}
}
//去除前导0
for(int i = 1; i <= 500; ++i)
{
int j;
for(j = 110; j >= 0; j--)
if(F[i][j] == 0)
continue;
else
break;
int k = 0;
for(; j >= 0; j--)
Fi[i][k++] = F[i][j] + '0';
F[i][k] = '\0';
}
}

int cmp(char *A,char *B)
{
int LenA = strlen(A);
int LenB = strlen(B);
if(LenA != LenB)
return LenA > LenB ? 1 : -1;
else
return strcmp(A,B);
}
//使用二分法查找,返回low,flag是一个是否直接找到Num的标志
// 二分法直接按现实步骤模拟就行了
int Search(char *Num,bool &flag)
{
int low = 1;
int high = 480;
while(low <= high)
{
int mid = (low+high)/2;
int res = cmp(Num,Fi[mid]);
if(res == 0)
{
flag = 1;
return mid;
}
else if(res < 0)
high = mid - 1;
else
low = mid + 1;
}
return low;
}
char A[MAXNLEN],B[MAXNLEN];

int main()
{
Fibo();
while(~scanf("%s %s",A,B))
{
if(strcmp(A,"0")==0 && strcmp(B,"0") == 0)
break;

bool FlagA = 0;
bool FlagB = 0;
int Left = Search(A,FlagA);
int Right = Search(B,FlagB);

if(FlagB)
printf("%d\n",Right-Left+1);
else
printf("%d\n",Right-Left);
}
return 0;
}

2018年8月2日 下午3:54

网上的解法:

199. Binary Tree Right Side View - CSDN博客

分析:

199. Binary Tree Right Side View这篇是老师的写法,但是我去理解的时候总觉得这种方法让我想的话十分的困难,难点在于:这种解法将问题巧妙的变换成了另一个遍历队列的问题,看似巧妙,但是给人的理解造成了比较大的困难。我觉得这样的并不能说是一个很好的算法,很好的算法应该让人一下就明白。

而,我在网上找到的这个两个解法,依靠的是树的BFS和DFS这两个基本的算法。我们要做的是根据题意,在原先的解法上面找出更改和创新的地方,弄清楚我们要在原先的基础上做什么

BFS中,我们需要找到在保存的队列中,每层最右边的那个节点的位置。
DFS中,我们需要采用右序遍历,并找到判断 (每层最右边的那个节点的位置)的条件

2018年7月28日 下午4:01

『不羁阁』 | Walking Boy’s Blog - CSDN博客
现在我的思考方式:一定要联想到自己用过的方法和题(工具),这样思考问题才有下手点,不累。然后,要找到这道题中新的方法,总结下来,方便下次使用

2018/8

『不羁阁』 | 高精度 | 进制相关

  1. HDU1250_Hat’s Fibonacci【高精度】【水题】 - CSDN博客
    1. 通过数组模拟大数加法
  2. POJ1423 HDU1018 Big Number【斯特林公式】【高精度】 - CSDN博客
    1. N!的公式:斯特林公式
  3. POJ2413 How many Fibs?【高精度】【二分】 - CSDN博客
    1. 通过数组模拟大数加法,做出480个统计的结果
    2. 再通过二分查找法寻找位置,进而算出最后的结果
    3. POJ2413 How many Fibs?【高精度】
  4. POJ2506 Tiling【高精度】【递推】 - CSDN博客
    1. 总结出前后的关系,然后通过数组来模拟大数加法,写出dp公式
    2. 定位就要定位到dp,要不真的都无法下手
  5. ACM-高精度模板(综合篇) - CSDN博客
  6. 【C++】fill函数,fill与memset函数的区别 - CSDN博客
  7. 程序人生 -【2017年读书报告+书籍推荐】 - CSDN博客
  8. GitHub - liuchuo/PAT: 🍭 浙江大学PAT题解(C/C++/Java) - 努力成为萌萌的程序媛~
  9. POJ1001 Exponentiation【高精度】 - CSDN博客
    1. 高精度,大数乘法
    2. 通过 s 的小数点位置计算出小数点在 s 的 N 次方的结果中的位置
      1. pos = (strlen(s)-i-1)*N; //计算浮点数s^N小数点后的位
    3. 并且涉及到了比较复杂的大数的表示格式 int数组 + string+ char ,那必然会有他们之间的相互转换
    4. POJ1001 Exponentiation【高精度】高精度乘法
  10. POJ1023 The Fun Number System【进制相关】 - CSDN博客
    1. 我们直接找十进制和二进制的关系不好找,这里利用一个十进制数的二进制形式与要求形式做对比,找出其中的变换规律
    2. 这里用到了二进制位移操作,操作精确到位
  11. POJ1047 Round and Round We Go【高精度】 - CSDN博客
    1. 使用了大数乘法
    2. 对一维数组排序:sort(Num,Num+N);
  12. 2015 ACM/ICPC合肥网赛&HDU5491 The Next - CSDN博客
    1. 主要是学习这个for-if的复杂处理
    2. 这道题一个数组有两个要求,我一开始没有利用好a<L<b这个条件,既然有那就肯定有用,不用感觉都不对。
    3. HDU5491 The Next
  13. 【POJ3101】Astronomy——分子的最小公倍数 - CSDN博客
    1. 这道题有比较恶心🤢的数学公式。
    2. 分解质因数的方法_百度知道
    3. 分解质因数
    4. poj3101——Astronomy(大数数学&gcd) - CSDN博客
    5. C++求最小公倍数 - 花开不败 - 博客园
    6. 任意整数和0的公约数是0,1,还是整数本身?_作业帮
    7. NYOJ 517 最小公倍数 (1-n 个数的最小公倍数,大数) | 学步园
      1. 最小公倍数就是所有质数的相应幂的积
    8. 求n个数的最小公倍数 - CSDN博客
    9. 【POJ3101】Astronomy

2018/8/23

网络流入门-2
网络流入门-1

2018年7月24日 上午10:23

2018年12月7日 下午6:40
XML
数据库在整个知识体系中的位置
分布式的整体理解

2019年4月7日 下午6:40 旧
ORCALE SQL语法总结
2【SQL如何分析(SQL测试题)
PLSQL(PLSQL语法+存储过程+触发器)
表复制(根据一个表创建另一个表)
数据库中索引+事务+sequence
SQL表连接
4【关于聚合函数注意事项
3【SQL相关子查询的补充
5【SQL的执行顺序
1【SQL书本笔记摘抄
数据库中定时处理数据+常用操作

2018年7月24日 下午8:07

【AI数学理论】为什么神经元要有激活函数 - CSDN博客

没有激活函数的单层感知机就是一个苍白的线性函数,它的拟合能力又如何呢?

  • y=wx+b,无论w和b如何变换,y都跟x成强线性相关

结论:

  • 没有激活函数的神经网络,相当于没有激活函数的单层感知机,这种钢铁直男产物只能拟合狭义线性曲线。。比如随便来一个分段函数他都拟合不了。

2018年7月24日 下午6:55

特征处理的方法有:

  1. One-hot
  2. 归一化
    1. 防止将不同特征之间的数值大小作为特征
  3. 图像的直方图均衡化
  4. 均值滤波
    1. 模糊图片中我们不想作为特征的部分
  5. 。。。。

总结:

  1. 这些特征的处理他并不是加上就好,要和不要最笨的方法就是比较最后的结果。
  2. 对特征处理的目的:为了更加凸显出那些对结果影响大的特征,遮蔽一些和结果没有关系的特征。并且,需要被遮挡的特征中有很多是机器学习算法能发现但是人却发现不了的特征,这些特征会影响最后的结果
  3. 这就说明了特征处理,关键是要对特定的数据有深刻的分析,一方面要突出正确的特征,一方面要分析出那些隐藏的错误的特征

2018年7月24日 下午2:02

GBDT(MART) 迭代决策树入门教程 | 简介 - CSDN博客
本文对c4.5分类树,回归树,GBDT核心等概念做出来清晰的解释。

  1. GBDT主要由三个概念组成:Regression Decistion Tree(即DT),Gradient Boosting(即GB),Shrinkage (算法的一个重要演进分枝,目前大部分源码都按该版本实现)。
  2. GBDT的核心就在于, 每一棵树学的是之前所有树结论和的残差,这个【残差】就是一个加预测值后能得真实值的累加量
    1. 比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学。
  3. 这篇文章讲解的例子是GBDT的一个特例
    1. 在当前版本GBDT描述中,的确没有用到Gradient,该版本用残差作为全局最优的绝对方向,并不需要Gradient求解.
  4. 既然图1和图2最终效果相同,为何还需要GBDT呢?
    1. 核心思想就是:为了防止过拟合别一次追求完美
  5. 与adaboost的区别?
    1. GBDT和adaboost都属于boosting,boosting的核心是:要分阶段,考虑的重点在于考虑当前阶段掉队的数据,然后在下一个阶段着重考虑他们
    2. GBDT的方法:通过梯度来构造掉队数据,再针对性训练(这个例子中梯度用残差代替)
    3. adaboost方法:通过给掉队的数据加大权重训练