VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: VB妮可

[经验技巧] 消除数组中的重复元素..

[复制链接]
发表于 2008-9-14 20:40:44 | 显示全部楼层
看了书林跋涉的那个引用
我突然想起有个字典树就是用来干这个的...
回复 支持 反对

使用道具 举报

发表于 2008-9-14 20:54:21 | 显示全部楼层
原帖由 VB妮可 于 2008-9-14 20:21 发表
书林的还有点迷糊..没看太懂..

hh的这个,代码确实很简单,且效果不错,但不知道这种on err的方法,真的能比其它方法更快吧..



这些都要拿大量数据来看才知道的
1千以内的数据用什么方法测试,速度都不会太慢。
回复 支持 反对

使用道具 举报

发表于 2008-9-14 21:24:04 | 显示全部楼层
用类试了下,目前只支持小写的单词

尴尬,之前那个错了,已改...

[ 本帖最后由 仙剑魔 于 2008-9-14 22:57 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2008-9-15 15:42:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

发表于 2008-9-15 17:08:10 | 显示全部楼层
开大空间,英文中文全支持...
我不保证内存会怎么样...
ClassTree

Option Explicit
Option Base 0
Private Point(255) As ClassTree
Public Ends As Boolean

Public Property Set Dic(ByVal Index As Integer, ByVal Tree As ClassTree)
    Set Point(Index) = Tree
End Property

Public Property Get Dic(ByVal Index As Integer) As ClassTree
    Set Dic = Point(Index)
End Property

Public Sub Add(ByRef s As String)
Dim i As Long, j As Long, t As ClassTree
Dim Buffer() As Byte
Buffer = StrConv(s, vbFromUnicode)
Set t = Me
For i = 0 To UBound(Buffer)
    j = Buffer(i)
    If t.Dic(j) Is Nothing Then Set t.Dic(j) = New ClassTree
    Set t = t.Dic(j)
Next
t.Ends = True
End Sub

Public Function IsExists(ByRef s As String) As Boolean
Dim i As Long, j As Long, t As New ClassTree
Dim Buffer() As Byte
Buffer = StrConv(s, vbFromUnicode)
Set t = Me
For i = 0 To UBound(Buffer)
    j = Buffer(i)
    Set t = t.Dic(j)
    If t Is Nothing Then Exit Function
Next
IsExists = t.Ends
End Function
回复 支持 反对

使用道具 举报

发表于 2008-9-23 00:00:42 | 显示全部楼层

书林的算法不错

这个算法用位来操作,比较快。如果改进一下,也能适应对汉字做筛选。我做了一下,但不成功,但我相信能够做到的!
类就采用递归算法,还是第一次。我很佩服!!
希望书林作进一步改进,使这个类能针对汉字、数值、英文及其混合文档。并且在类的方法上(比如提出重复后排序、不排序)扩展,属性上增加输入文件名、输出文件名,这样更好用!
回复 支持 反对

使用道具 举报

发表于 2008-9-23 00:03:39 | 显示全部楼层

回复 #15 仙剑魔 的帖子

很遗憾,没书林的完美
回复 支持 反对

使用道具 举报

发表于 2008-9-23 01:23:33 | 显示全部楼层
这个算法的前提是分支不算太大
字母是26个 算大小写才52个 加数字 62个 都还好
每增加1个结点 就有一个新类 每个类 起码占用 62*4 个字节的空间

加中文就不得了了 分支有几千个 那每个类占用的空间 起码是 所有中文*4个字节的空间
这样浪费的空间就太大了

所以只适合分支不算太多的情况
回复 支持 反对

使用道具 举报

发表于 2008-9-23 08:45:30 | 显示全部楼层
如果把中文分开
分别统计 单词和中文字的个数
这样就可以构造一个类 共 65536个分支
或者构造一个类 共256个分支
每个中文 需要经过2次分支。
这样的可行性就比较大了。
回复 支持 反对

使用道具 举报

发表于 2008-10-4 17:12:06 | 显示全部楼层
百家争鸣!
回复 支持 反对

使用道具 举报

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

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-4 04:14

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表