[Acmer日志]2021/3/19星期五-链式前向星-拓扑排序

[Acmer日志]2021/3/19星期五,天气小雨,冷

卷首语

这是我大一下学期以来的第一篇日志,并且在接下来的每一天都会写出一份类似的日志,用以记录算法、大学基础学科的学习以及学习生活中的一些想法和感触。

今日算法

离散化数据 :

  • 当数据太大而无法作为下标保存对应的属性,且数据只与他们之间的相对大小有关而与具体值无关时,应当使用离散化。
  • 实现方法:构建结构体,记录原数据数值与序号,对其排序后给予数据新值。
  • 代码实现:
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课后作业并且完成下一份日志。

今日鸡汤

在所有挑战中,挑战自己是最容易的,同时也是最难的。
学习算法就是对你自己的挑战。
如果你能坚持到底,
无关比赛,你已经赢了。
——航电 刘春英

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值