【数学/数组】的【排序/转换】问题,高分求最佳算法

shdfl 2008-07-26 08:48:27
  
一个巨型字符型数组(赋值长度为8字节),赋值规律为:
从 00000000 开始,按自然数递增,直至 99999999

如果将每个值的按0-9的【升序】的顺序重新排序,将会分别得到它们的1个【新值】

比如:
 原值   -->  新值
"00001234" --> "00001234"
"00012340" --> "00001234"
"00123400" --> "00001234"
"01234000" --> "00001234"
"12340000" --> "00001234"
"23400001" --> "00001234"
"34000012" --> "00001234"
"40000123" --> "00001234"

很显然,当所有的【原值】经过排序转换后,有N多的【新值】都是完全相同的


--------------------------------------------
需要解决的问题有两个,求它们的最佳算法

【问题1】
求这个巨型数组的所有【不同新值】的个数(及具体算法)
如果在排序的过程中,只保留最新出现的某个【新值】(也是字符型,长度8字节)
之后出现的与它完全相同的【新值】则全部过滤掉
也就是说,从 00000000 --> 99999999,一共存在多少个不同的【新值】


【问题2】
假定所有【不同新值】的个数是N个,N其实就是【问题1】的答案
然后将这【N个新值】按【从小到大】的顺序进行排序
这样每个【新值】都会得到1个【编号X】

那么,
如何将 00000000 --> 99999999 每个排序出来的【新值】
用其对应的【编号X】进行标记?

比如:已经存在某个库,库的记录数就是99999999+1条(00000000 --> 99999999)
如何将这个库里每条记录的【“新值编号”字段】的内容,更新为【编号X】

或者,对于数组里的任何1个【原值】,比如 “56892226”
它的【新值】就是 “22256689”
如何得到 “22256689” 的【编号X】


--------------------------------------------
我的水平实在很菜,对于【问题2】,只想到了循环替换
但因为数组记录数巨大,效率实在太低了

有请高手赐教高效算法


--------------------------------------------
另:提问时【给分框】的上限只有100分,如何给更多分?

  
...全文
92 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wtogether 2008-07-26
  • 打赏
  • 举报
回复
不同值只有用字典了
Dim dic
Dim arr '巨型数组
Dim i
Set dic = Server.CreateObject("Scripting.Dictionary")
For Each i In arr
dic(i) = i
Next
arr = dic.items '这就是不同值的数组
Set dic = Nothing
然后再用冒泡也好,快速也好,二分也好,分段也好,反正谁最快就用谁
rankisky 2008-07-26
  • 打赏
  • 举报
回复
社区帮助里有积分说明。
jhwcd 2008-07-26
  • 打赏
  • 举报
回复
用快速排序法吧。
过一天可以再加分的。

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧