Contents

ARST打卡第262周

lc1553_吃掉N个橘子的最少天数 【TED演讲】怎样学外语才最有效果 哈佛大学推荐的10个快乐习惯 分布式存储网盘shdwdrive技术

Algorithm

lc1553_吃掉N个橘子的最少天数

思路:

这里能被3整除,就能把n整除3,能被2整除就把n整除2.最后到1之后必定要吃一个橘子的。

感觉可以反过来从1推导到n的最小操作数。但是好像容易超过n,还是n递归到1再回溯吧。

那就一口口吃然后到2或者3的倍数,对比哪个快来贪心。

看了一下tips. 也是类似思路, 开写

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
    unordered_map<int, int> minDay;
public:
    int sol(int n) {
        if (minDay.find(n) != minDay.end()) {
            return minDay[n];
        }
        // 花一天去吃一半或者2/3
        minDay[n] = 1 + min(n%2 + minDays(n/2), n%3 + minDays(n/3));
        return minDay[n];
    }

    int minDays(int n) {
        minDay.clear();
        minDay[1] = 1;
        // 2,3 必须也记录,不然会访问到 minDays(0) 导致异常。
        minDay[2] = 2;
        minDay[3] = 2;
        return sol(n);
    }
};

没想到剪枝了还是超出时间限制

99 / 176 个通过的测试用例

最后执行的输入 n = 6128305

看一下 题解

题解说的最短路,用优先队列+Dijkstra 好惊艳,这大概就是为啥图计算比较快的缩影吧。

 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
using PII = pair<int, int>;

class Solution {
public:
    int minDays(int n) {
        priority_queue<PII, vector<PII>, greater<PII>> q;
        unordered_set<int> visited;
        q.emplace(0, n);
        int ans = 0;
        while (true) {
            auto [days, rest] = q.top();
            q.pop();
            if (visited.count(rest)) {
                continue;
            }
            visited.insert(rest);
            if (rest == 1) {
                ans = days + 1;
                break;
            }
            q.emplace(days + rest % 2 + 1, rest / 2);
            q.emplace(days + rest % 3 + 1, rest / 3);
        }
        return ans;
    }
};
// 链接:https://leetcode.cn/problems/minimum-number-of-days-to-eat-n-oranges/solutions/384947/chi-diao-n-ge-ju-zi-de-zui-shao-tian-shu-by-leetco/

启发式算法有点看不懂,算了,暂时不会用到。-> 所以之前自己竞赛其实没入门多少,害,人生。

Review

【TED演讲】怎样学外语才最有效果

不要担心说错来分心,而是专注于别人说的大概意思,自己要表达的大概意思。

世界上96%的英文沟通都有非英语母语者参与,所以大胆一点,抛弃掉学生时代的必须完全正确的思维, 把English带回沟通的本质,就能专注地沟通好。

而且这种沟通的态度,就不会畏难导致抗拒,而是尝试专注得沟通。才能学得快,用得快。

Tips-哈佛大学推荐的10个快乐习惯

  1. 做自己最感兴趣的事情 兴趣是最好的老师,找不到怎么办呢? 多试试不一样的事情,慢慢找
  2. 过好当下每一天 心态的平和,找准自己的人生定位,珍惜你所拥有的
  3. 坚持到底不放弃 遇到困难,放弃虽然能得到一时的轻松,但同时失去了在未来拥有成功的满足感
  4. 把追求幸福当做人生终极目标 幸福不仅是享乐,幸福是实现人生价值后的满足感
  5. 乐观对待周遭的一切 保持乐观的心态看待周围的一切,用乐观的心态处理问题
  6. 对工作充满热情 最终的成绩与投入多少热情有很大关系
  7. 要经常笑 对着自己笑一笑,人生其实没有什么大不了
  8. 掌控自己的情绪 有情绪是一个很正常的现象,但不要让负面情绪支配自己太久
  9. 对自己要自信 在内心相信自己是优秀的,相信相信的力量
  10. 做事坚持自己的原则 是我们做事所依据的标准,规范着我们应该做什么和不应该做什么

Share

分享一个分布式存储网盘shdwdrive技术:

用ceph的OSD做存储基座,用上CRUSH算法。然后上层借用solana区块记账,以及用DAGGER共识。

整体看上去比较新的技术缝合产物,学习分享一下。

根据官网宣传效果挺好的,还上了solana最近大会的分享。

但是代币坑了我11u,哈哈

DAGGER

为什么 D.AGGER 使用非循环图来达成共识? 股权证明(PoS)和工作量证明(PoW)是区块链网络中最流行的两种共识机制。在 PoS 中,验证者或节点根据其持有并愿意“质押”的加密货币数量来选择验证交易。他们持有和质押的越多,被选为验证者的概率就越高。在 PoW 中,矿工们竞相解决复杂的数学问题,第一个解决该问题的人将获得加密货币和验证交易的权利作为奖励。

另一方面,DAGGER是一种基于有向无环图(DAG)的共识机制,节点之间直接通信并共享其交易,从而创建交易的 DAG。在这个 DAG 中,每个节点都有自己的交易历史,通过分析整个图并识别单个商定的交易顺序来达成共识。此过程可实现高吞吐量和快速最终确定,使其成为需要高速和可扩展性的应用程序(例如 ShdwDrive、DAGGER Mobile、AI 模型训练)的有吸引力的选择。

对于像 GenesysGo ShdwDrive 这样的去中心化存储网络,DAGGER允许水平扩展,这意味着网络可以通过添加更多节点、增加存储容量和处理能力来扩展,而不会影响网络的速度或安全性。这是因为每个节点都可以独立处理和验证交易,并且通过分析整个 DAG 来达成最终共识。

另一方面,Filecoin和IPFS等存储证明 (PoS) 共识机制通过激励参与者存储和检索数据以换取加密货币奖励来实现去中心化存储。 PoS 系统有可能提供比集中式存储解决方案更高的安全性,因为数据分布在多个节点上,使得任何单个节点都很难危害网络。然而,PoS 系统通常需要大量的存储容量和计算资源才能参与,这使得公众很难使用它。

总之,DAGGER协议提供了独特的共识机制,可实现高吞吐量、快速确定性和水平可扩展性,使其成为 ShdwDrive 等去中心化应用程序的有吸引力的选择。 PoS、PoW 和 PoS 共识机制都提供不同的好处和权衡,选择使用哪一种取决于应用程序的具体要求。