项目挑战: 学校微课平台推荐功能设计 课件(15张PPT)

文档属性

名称 项目挑战: 学校微课平台推荐功能设计 课件(15张PPT)
格式 pptx
文件大小 1.2MB
资源类型 教案
版本资源 浙教版(2019)
科目 信息技术(信息科技)
更新时间 2024-05-08 19:16:39

图片预览

文档简介

(共15张PPT)
项目挑战:学校微课平台推荐功能设计
LOREM IPSUM DOLOR
总结评价
1
项目任务
根据项目任务构建模型
2
编程实现
合理使用数组、链表解决实际问题
分别用数组、和链表实现
3
推荐算法
学校新建了一个微课平台,用来展示校内教师和学生自制的微课。为了更好地服务师生,学校想增加微课平台的推荐功能,即当某个用户点播了某个微课后,平台会依据一定的规则推荐相关的微课。
假如你作为平台的设计者,现在需要你来开发实现这个微课平台的推荐功能。
项目任务
推荐规则1:以用户类型做推荐,如用户类型是“高一”,则推荐点播次数最多的前n个高一课程
推荐规则2:以微课类型做推荐,如微课类型是“语文”,则推荐点播次数最多的前n个语文课程
提问:你对以上两个推荐规则有什么看法,能提出自己设计的推荐规则吗?
推荐规则
根据你的推荐规则,所设计的数据特点是什么?
选择数组还是链表来实现?
先谈谈数组和链表各自的特点吧!
数据结构选择
数组优点:因为连续存储,可以随机存取元素,实现方便
数组缺点:空间大小固定,易浪费空间。插入和删除操作较浪费性能(可能会产生大量元素的移动)
数据结构选择
链表优点:空间利用灵活
链表缺点:存取麻烦
每次存取需要从头节点(head)开始搜索
数据结构选择
编程实现
语言
编程工具
types=input("输入年级")
lst中一个元素内容如:[[姓名,年级,微课类型]]代码略
dic={}#初始化空字典
for i in range(n):
if lst[i][1]==types:
if lst[i][2] not in dic:
dic[lst[i][2]]=1
else:
dic[lst[i][2]]+=1
第一步:统计每个视频的点播次数
数组法实现推荐规则1
menu=[[0,0]]*4
for i in range(4):
for key,values in dic.items():
if dic[key]>menu[i][1] and [key,values] not in menu:
menu[i]=[key,values]
第二步:按点播次数多少排列
数组法实现推荐规则1
运行程序
数组法实现推荐规则1
链表法实现
构建字典dic,以课程名为键(key),点播次数为值(value)
for key,values in dic.items():
menu.append([key,values,p])
p+=1
menu[-1][2]=-1
第一步:初始化,构建无序链表
def linksort(lst):
head=0;cur=lst[head][2] ; pre=head
while cur!=-1:
lst[pre][2]=-1;p=head
nt=lst[cur][2];v=lst[cur][1]
if v>lst[head][1]:
lst[cur][2]=head;head=cur
else:
while v<=lst[p][1] and p!=-1:
q=p;p=lst[p][2]
lst[q][2]=cur; lst[cur][2]=p
if p==-1:
pre=cur
cur=nt
return head
第二步:对链表进行插入排序
链表法实现
head=linksort(menu)
rclnk(menu,head,5)
第三步:输出链表中播放次数较多的前n位
def rclnk(lst,head,n):
i=1
while lst[head][2]!=-1 and iprint(lst[head],end="→")
head=lst[head][2]
i+=1
lst[head][2]=-1
print(lst[head],end="→")
print("None")
链表法实现
评价