小明:最近我在开发一个学校管理系统,里面需要有一个排课系统,你有什么建议吗?
小李:排课系统的核心是解决课程安排冲突的问题。通常我们会用图论算法或者回溯法来处理。
小明:那能不能给我一个简单的代码示例?

小李:当然可以,下面是一个基于回溯法的简单排课系统代码:
def schedule_courses(courses, rooms, times):
# 简单的回溯算法
if not courses:
return True
course = courses[0]
for room in rooms:
for time in times:
if is_available(room, time):
assign_course(course, room, time)
if schedule_courses(courses[1:], rooms, times):
return True
unassign_course(course, room, time)
return False
小明:看起来不错,但如果是排行榜呢?比如一个游戏的得分排行榜,怎么实现?
小李:排行榜一般会使用优先队列(堆)或数据库排序来实现。下面是一个用Python实现的简单排行榜:
import heapq
class Leaderboard:
def __init__(self):
self.scores = []
def add_score(self, name, score):
heapq.heappush(self.scores, (-score, name)) # 使用负数实现最大堆
def get_top_scores(self, n):
return [heapq.heappop(self.scores)[1] for _ in range(n)]
小明:明白了,排课系统和排行榜虽然用途不同,但都依赖于数据结构和算法。
小李:没错,两者都是典型的计算机科学问题,合理选择数据结构和算法是关键。
