一句python两句R:贪心算法简单案例(暨 R语言在for循环中调用字典的方法)
Posted 基督徒Isaac
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一句python两句R:贪心算法简单案例(暨 R语言在for循环中调用字典的方法)相关的知识,希望对你有一定的参考价值。
标题模仿:
https://blog.csdn.net/sinat_26917383/article/details/52289476
python代码摘抄:
https://blog.csdn.net/hwl19951007/article/details/88957967
- 案例
有abcd四个字母,需要被选出,
有k1:ab;k2:bc;k3:cd;k4:bcd 四种方案,
用最少的几种方案组合,把四个字母都选出来。 - Python代码
Python的字典在for循环中好好用啊
(台词via虾君:爷爷奶油面包好好吃)
needed = set(["a", "b", "c", "d"]) # 传入一个数组,被转换为集合
knum =
knum["k1"] = set(["a", "b"])
knum["k2"] = set(["b", "c"])
knum["k3"] = set(["c", "d"])
knum["k4"] = set(["a", "b","c"])
final = set() # 使用一个集合来存储最终选择的方案
while needed:
best = None # 将覆盖了最多的needed的方案存储进去
max_covered = set() # 一个集合,包含该次循环中覆盖的最多needed
for k, value in knum.items(): # 循环迭代每个方案并确定它是否是最佳的方案
covered = needed & value # 计算交集
if len(covered) > len(max_covered): # 检查该方案的覆盖范围是否比上一个多
best = k # 如果多,就将该方案设置为best
max_covered = covered
# 在for循环遍历完所有方案以后,找到本次best
needed -= max_covered # 更新needed
final.add(best) # 在for循环结束后将best添加到最终的广播台列表中
print(final) # 每次for循环结束打印本轮final方案
- R语言代码
R语言可以用list代替字典,
在for循环中选出 键名 in names(list)
用 list[[键名]] 提取对应的键值。
也可以用hash包的hash()生成字典
再用基础的names()或hash包的keys()提取键名。
有点麻烦哦,但是是可以实现的。
R语言中实现Python的set集合(即不重复集合),可以对向量使用unique()代替。
library(tidyverse)
needed <- letters[1:4] %>% unique
knum <- list(k1 = letters[1:2] %>% unique,
k2 = letters[2:3] %>% unique,
k3 = letters[3:4] %>% unique,
k4 = letters[1:3] %>% unique)
final <- c() # 剔除重复项后的集合
while (length(needed) > 0)
best <- c()
max_covered <- c() # 该次循环覆盖最多needed的方案所覆盖的needed,剔除重复项后的集合
for (k in names(knum))
covered <- intersect(needed, knum[[k]])
# 第2次循环开始,每个键值与之前保存的覆盖量比较
if (length(covered) > length(max_covered))
best <- k
max_covered <- covered %>% unique
# 在for循环遍历完所有names(knum)以后,找到本次best
needed <- setdiff(needed, max_covered) %>% unique
final <- final %>% append(best) %>% unique
print(final)
- 结果
Python结果排序可能会不一样,R中则会按方案顺序给出最终输出。
例如本例中,Python的结果可能是
‘k4’
‘k3’, ‘k4’
而R语言的结果是
[1] “k4”
[1] “k4” “k3”
- 补充阅读
参考文献:《算法图解》P126页
想要了解更多关于R中的字典,可以查阅hash包
https://www.cnblogs.com/xlij1205/p/10917926.html
以上是关于一句python两句R:贪心算法简单案例(暨 R语言在for循环中调用字典的方法)的主要内容,如果未能解决你的问题,请参考以下文章
一句python两句R:贪心算法简单案例(暨 R语言在for循环中调用字典的方法)