Python相比于C++
  • 板块学术版
  • 楼主shinzanmonoszm 妹妹
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/9/12 18:16
  • 上次更新2023/10/27 11:48:45
查看原帖
Python相比于C++
610557
shinzanmonoszm 妹妹楼主2022/9/12 18:16

论Python的好与坏

Python作为数据收集如处理的神犇,适合数据的处理。内置带有高精度,集合,映射的数据类型,比较好用。。。

BUT!!!Python写算法就是另外一说了,用Python写UFS和C++写UFS根本就是天壤之别。那如果是珂朵莉树这样的数据结构结构呢。。。 自己想去吧~~

再者,Python有许多算法都是提前写好的,所以初始运行时间较慢(没Java慢)。

综上所述,Python不适于用于OI

文末附按秩合并+路径压缩UFS

UFS C++

struct UFS {
    vector<int> fa, ssz;
    void clear(int n) { 
        fa.resize(n + 1), ssz.resize(n + 1, 1); 
        for(int i = 0; i <= n; i++) fa[i] = i; 
    }
    int find(int n) { 
        if(fa[n] == n) return n; 
        return fa[n] = find(fa[n]); 
    }
    void merge(int u, int v) { 
        int fu = find(u), fv = find(v); 
        if(fu == fv) return;
        if (ssz[fu] > ssz[fv]) swap(fu, fv);
        fa[fu] = fv, ssz[fv] += ssz[fu]; 
    }
} ufs;

UFS Python

import numpy as np


class UnionFindSet:
    def __init__(self, size):
        self.fa = np.array(range(size + 1))
        self.ssz = np.ones(size + 1, int)

    def clear(self, size):
        self.fa = np.array(range(1, size + 1), int)
        self.ssz = np.ones(size + 1, int)

    def find(self, u):
        if self.fa[u] == u:
            return u
        self.fa[u] = self.find(self.fa[u])
        return self.fa[u]

    def merge(self, u, v):
        fu = self.find(u)
        fv = self.find(v)
        if fu == fv:
            return
        if self.ssz[fu] > self.ssz[fv]:
            fu, fv = fv, fu
        self.fa[fu] = fv
        self.ssz[fv] += self.ssz[fv]

2022/9/12 18:16
加载中...