卷首语
这是我大一下学期以来的第一篇日志,并且在接下来的每一天都会写出一份类似的日志,用以记录算法、大学基础学科的学习以及学习生活中的一些想法和感触。
今日算法
离散化数据 :
- 当数据太大而无法作为下标保存对应的属性,且数据只与他们之间的相对大小有关而与具体值无关时,应当使用离散化。
- 实现方法:构建结构体,记录原数据数值与序号,对其排序后给予数据新值。
- 代码实现:
struct Num {
int val, order;
} num[100007];//val是数值,order是序号
bool cmp (struct Num a, struct Num b) {
return a.val < b.val;
}//sort函数从小到大排序cmp
int main (void) {
for (int i = 1; i <= n; ++i) {
cin >> num[i].val;
num[i].order = i;
}//读入数据
sort(num + 1, num + 1 + n, cmp);
int count = 0;//注意这里用count而不用i更新
for (int i = 1; i <= n; ++i)
{
if (num[i].val == num[i - 1].val)
d[num[i].order] = count;//这里如果遇到数值与前面数值相等,就令他等于前面的count
else
d[num[i].order] = ++count;
}//这个循环就是赋新值操作,把原来的值按照相对大小赋予新值
return 0;
}
拓扑排序
- 涉及到的知识点有:图,度,入度和出度(入度是关键)
- 前提条件:无环图
- 实现方法:1. 在无环图中寻找一个没有前驱的节点(或者说是入度为0的节点)并输出
2.在图中删除这个节点以及一次节点为尾的度
3.如果所有节点都已经输出,则程序结束,否则重复1操作。 - 代码实现:
前向星
邻接表的三种实现方法:
1.邻接矩阵
2.vector数组
3.前向星
迪杰斯特拉最短路径算法的堆优化(暂无)
原因:算法的实现用到优先队列,鄙人未曾接触优先队列,遂择一佳日再战
今日AC数: 1
今日总结
中午第一节高数补线代,第二节线代补觉。(不再想五点起床了,折磨)
中午放学没饭吃,太晚了。
下午刷了500个科目一的题。
傍晚收快递、吃饭、修车。
晚上回来上ACM算法网课,已及时复习,打了局王者。
晚安。
也是没什么收获的一天。
我很想把原因归结到感冒上。
可是感冒也是我的责任。
还是自己太弱了哈。
最近总感觉很压抑、提不起兴致,像一棵没有思考的苇草,原因不明。
为数不多的喜悦就是跟朋友走在路上聊聊家长里短。
也许夜里只有那一串“Accepted”能赐我一夜安眠。
明天目标
早晨自然醒、吃饭然后在宿舍学习高数,完成第二章练习册,下午完成第二章课后习题。晚上三道ACM课后作业并且完成下一份日志。
今日鸡汤
在所有挑战中,挑战自己是最容易的,同时也是最难的。
学习算法就是对你自己的挑战。
如果你能坚持到底,
无关比赛,你已经赢了。
——航电 刘春英