Python & Swift 代码比较:树形结构统计
Python & Swift 代码比较:树形结构统计
本文比较了 Python 和 Swift 中的代码实现,用于处理树形结构并统计节点和最大子树节点数量。
Python 代码
while True:
try:
n = int(input())
sets = [list(map(int, input().split())) for _ in range(n)]
parent, nums = {}, {}
for s in sets:
p = s[0]
nums.setdefault(p, 0)
for i in s:
if i not in parent:
parent[i]=p
nums[p]+=1
else:
while parent[i]!=p:
tmp = parent[i]
parent[i]=p
i = tmp
parent[i]=p
if i!=p and i in nums:
nums[p]+=nums[i]
del nums[i]
print(len(nums.keys()))
print(max(nums.values()))
except:
break
Swift 代码
while true {
if let n = readLine(), let nInt = Int(n) {
var sets = [[Int]]()
for _ in 0..<nInt {
if let set = readLine()?.split(separator: " ").compactMap({ Int($0) }) {
sets.append(set)
}
}
var parent = [Int: Int]()
var nums = [Int: Int]()
for s in sets {
let p = s[0]
nums[p, default: 0] += 1
for i in s {
if parent[i] == nil {
parent[i] = p
nums[p, default: 0] += 1
} else {
var tmp = i
while parent[tmp] != p {
let tmpValue = parent[tmp]!
parent[tmp] = p
tmp = tmpValue
}
parent[tmp] = p
if tmp != p, let num = nums[tmp] {
nums[p, default: 0] += num
nums.removeValue(forKey: tmp)
}
}
}
}
print(nums.keys.count)
print(nums.values.max() ?? 0)
} else {
break
}
}
代码分析
- 两段代码都使用循环读取输入,并构建一个树形结构。
- Python 代码使用了字典
parent来记录每个节点的父节点,以及字典nums来记录每个节点的子树节点数量。 - Swift 代码也使用了字典
parent和nums来存储相同的信息,但使用了 Swift 中的可选类型和默认值处理。 - 两种代码都通过循环遍历每个节点的子节点,更新父节点和子树节点数量信息。
- 最后,分别输出节点数量和最大子树节点数量。
总结
Python 和 Swift 代码在功能上基本一致,都实现了对树形结构的处理和统计。Swift 代码利用了可选类型和默认值,代码更简洁,但可读性也略有下降。选择哪种语言取决于具体项目的需要。
原文地址: https://www.cveoy.top/t/topic/qsbi 著作权归作者所有。请勿转载和采集!