X岛揭示板
搜索
时间线
综合线
创作线
非创作线
亚文化线
综合2线
游戏线
生活线
综合
综合版1
DANGER/U/
欢乐恶搞
速报2
绘画(二创)
社畜(校园)
故事(小说)
都市怪谈(灵异)
军武
技术宅(代码)
数码(装机)
宠物
女装(时尚)
买买买(物品推荐)
亚文化
动画综合
漫画
婆罗门一
电影/电视
主播管人(圈内)
卡牌桌游
特摄(布袋戏)
战锤
胶佬(手办)
铁道厨(车辆)
VOCALOID
小马(美漫)
东方Project
舰娘
创作
跑团
创作茶水间
规则怪谈
海龟汤(推理)
科学(干货)
文学(推书)
音乐(推歌)
AI(Chatgpt)
摄影(cos)
ROLL点
游戏
游戏综合
手游专楼
任天堂
N
S
腾讯游戏(LOL)
暴雪游戏
SE(FF14)
V社(DOTA)
怪物猎人
鹰角游戏
米哈游
音游打卡
联机(服务器发布)
生活
露营
育儿
自救互助
料理(美食)
体育(健身)
学业打卡
日记(树洞)
管理
值班室
技术支持
版务
三百人委员会
功能
用户系统
我的订阅
我的发言(new)
手机版
普通版
首页版规
|
用户系统
|
移动客户端下载
|
丧尸路标
|
|
常用图串及路标
| 请关注 官方公众号:
【X岛揭示板】
官方微博:
【@X岛极速版】
|
人,是会思考的芦苇
常用串:·
豆知识
·
跑团板聊天室
·
公告汇总串
·
X岛路标
X岛揭示板
技术宅
No.59862559
第 1 页
登录
No.59862559 - 无标题 - 技术宅
回应模式
No.59862559
名 称
管理员
E-mail
标题
颜文字
正文
附加图片
水印
•程序语言、压制投稿、视频制作以及各计算机领域的技术问题
•我觉得还是CSDN靠谱一点
•本版发文间隔为15秒。
无标题
无名氏
2023-10-16(一)20:01:56
ID:4WVuFwF
[
举报
]
[
订阅
]
[
只看PO
]
No.59862559
[
回应
]
管理
管理 -> No.59862559
SAGE
编辑
查询
Cookie查询
锁Cookie
删串
肥哥们,问个算法问题
现在有A,B两个无序列表,列表里分别存着长度不等的无序int数组
比如
A=[
{1},
{1},
{2,5,4},
{3,6,8},
{4,6,8,7},
{9}
]
B=[
{1,9,4,4},
{1,5},
{2,5,5,4,8}
]
现在要判断A是否能匹配上B中的某一项,并返回这一项。
当B中的某一个数组的所有整数,都能在A中分别找到一个包含这个数的数组,就算匹配成功
…
无标题
无名氏
2023-10-17(二)09:34:52
ID:j3lJQyS
[
举报
]
No.59867214
管理
管理 -> No.59867214
SAGE
编辑
查询
Cookie查询
锁Cookie
删串
最好实现:map;
最快:A做一个二叉树排序,然后B对着查,如果有不在的return false。
…
无标题
无名氏
2023-10-17(二)13:08:23
ID:rAqxtB9
[
举报
]
No.59869204
管理
管理 -> No.59869204
SAGE
编辑
查询
Cookie查询
锁Cookie
删串
假设 A.len = n, 0 ≤ i ≤ A.len, 0 ≤ j ≤ B.len, m 为 序列A 中每个数组的期望长度,那么 A[i] 匹配 B[j] 的一个必要条件是 ①“A[i] 的长度大于或等于B[j] 的长度,并且A[i]的元素之和大于或等于B[j]元素之和”。
以①作为基础,对于 0 ≤ q ≤ A.len -1, 令 A[q] ≤ A[q+1] 等价于 “A[q] 的长度和内部元素之和都小于或等于 A[q+1]”,然后以此为基础对 序列A进行排序。
此处假设使用快速排序,那么求元素 A[i] 的长度和内部元素之和的运行时间为 O(m) 。由于快速排序平均运行时间为 Θ(nlgn), 因此对序列 A 排序的平均运行时间为 O(mnlgn)。
然后遍历序列 A,设 B[j] 为要查找匹配的B序列中的数组,B[j] 期望长度为 k,基于结论①,如果 B[j] ≤ A[i] ,那么先对A[i] 和 B[j] 进行排序后,再从头到尾比较匹配整型元素(此处具体操作省略)。运行时间 mlgm + klgk + m + k。为方便起见,令 k = m,则平均运行时间为 O(mlgm)。
遍历序列A 需要 O(n) 时间,则总的排序比较时间为 O(mnlgn) 。
那么,以上算法平均运行时间为 O(mnlgn) + O(mnlgn) = O(mnlgn)
…
无标题
无名氏
2023-10-17(二)18:43:18
ID:4WVuFwF
(PO主)
[
举报
]
No.59872070
管理
管理 -> No.59872070
SAGE
编辑
查询
Cookie查询
锁Cookie
删串
>>No.59869204
肥哥6啊,待我回去看看
…
无标题
无名氏
2023-10-17(二)19:56:14
ID:rAqxtB9
[
举报
]
No.59872716
管理
管理 -> No.59872716
SAGE
编辑
查询
Cookie查询
锁Cookie
删串
>>No.59869204
表达式有个地方写错了,总的运行时间应该是 O(mnlgn) + O(mnlgm)
…
无标题
无名氏
2023-10-17(二)23:52:21
ID:rAqxtB9
[
举报
]
No.59875093
管理
管理 -> No.59875093
SAGE
编辑
查询
Cookie查询
锁Cookie
删串
>>No.59869204
想到一个可能更优的算法:
创建一个数组C,一个散列表,一个函数 " int get_pos(int) "。
设 k = B[j].len, n = A.len, A[j] 期望长度为 m
数组 C 长度为 w ,w 是要匹配的数组 B[j] 的元素种类数,数组C 的值是数组 B[j] 的每种元素出现次数,初始值为0。
散列表的 key 是 数组 B[j] 的元素,散列表元素除了 key 以外还维护一个 pos 值,pos 值指示B[j] 的元素对应在数组C 的位置。一个合适的散列表查询的平均时间是 O(1)
函数 " int get_pos(int) "接收整型元素,在散列表中查找对应元素,找到了返回对应元素的 pos 值,没有找到则返回 -1。
然后遍历序列A, A[i]和 B[j] 开始比较前,先将遍历C让每个位置的值置为0,再遍历数组 B[j]然后将对应元素个数赋值给数组 C,耗时 Θ(k)。遍历 A[i],假设 0 ≤ y ≤ m-1, 得 pos = get_pos(A[i][y]),pos 不为 -1则 C[pos] = C[pos]-1,耗时 O(m)。然后再遍历一次 数组 C,若C所有元素都小于等于0,则认为已经找到匹配B[j]的数组,程序终止。可得序列A一次遍历的平均运行时间为Θ(2k+m) = Θ(k+m)。
序列A中有n个数组要遍历,遍历序列A平均运行时间为 O(n)
综上所述,在设计了良好的散列表的情况下,该算法平均运行时间为O(n(k+m))。
散列表的设计与实现可以找找一些好的学习资料来看看。
…
无标题
无名氏
2023-10-20(五)12:57:39
ID:QVtDlGV
[
举报
]
No.59899549
管理
管理 -> No.59899549
SAGE
编辑
查询
Cookie查询
锁Cookie
删串
把A里面所有数塞进一个集合里
把要匹配的B去重,依次判断A里是否存在对应的数
如果要求B里每个数对应A里不同的数组的话那难度就高很多了
上一页
1
下一页
UP主: