楼主: tr1ck
1129 2

[问答] 请教如何用R语言实现Trie树 [推广有奖]

  • 0关注
  • 0粉丝

初中生

9%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
76 点
帖子
4
精华
0
在线时间
16 小时
注册时间
2020-10-12
最后登录
2024-11-15

楼主
tr1ck 发表于 2020-10-22 21:57:36 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
近期一直在研究相关的算法,准备利用R语言实现一个的Trie树(下图)结构:
250px-Trie_example.svg.png


但是发现R语言实现这个结构还是比较麻烦,比如深层的引用传递:
  1. a1 <- list(name = list( b1 = c(1,2,3) ))

  2. a2 <- a1$name

  3. a2$b1 <- c(3,4,5)

  4. a1$name$b1
复制代码

所以小弟再阅尽了无数的资料,最终采用了一种笨办法,手动实现:
  1. rm(list = ls())

  2. trie <- list()

  3. test_str <- c('你好')

  4. addTrie <- function(trie, word) {
  5.   char_length <- nchar(word)
  6.   
  7.   single_str <- strsplit(word, '')[[1]]
  8.   
  9.   if (is.null( trie[single_str[1]][[1]] )) {
  10.     trie[[single_str[1]]] <- list()
  11.   }
  12.   
  13.   if (char_length == 2) {
  14.     if (is.null(trie[single_str[1]][[single_str[2]]][[1]])) {
  15.       trie[[single_str[1]]][[single_str[2]]] <- list()
  16.     }
  17.   }
  18.   
  19.   
  20.   if (char_length == 3) {
  21.     if (is.null(trie[single_str[1]][[single_str[2]]][[single_str[3]]][[1]])) {
  22.       trie[[single_str[1]]][[single_str[2]]][[single_str[3]]] <- list()
  23.     }
  24.   }
  25.   
  26.   trie
  27. }

  28. #这里如果还要处理更长的字符串,那么代码就会越来越臃肿

  29. trie <- addTrie(trie, '大家好')
复制代码

所以在此请教各位前辈,有什么办法可以解决这个问题吗?


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:R语言 如何用

沙发
owenqi 在职认证  学生认证  发表于 2020-10-23 11:16:06
没具体了解,你可以看看rtrie包

藤椅
tr1ck 发表于 2020-10-26 12:18:25
owenqi 发表于 2020-10-23 11:16
没具体了解,你可以看看rtrie包
感谢,这个包很好用

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-20 17:28