栈的练习——简单的背包问题

C栈的练习——简单的背包问题

-周硕 2018年3月28日

作业题3:假设有n件质量分配为w1,w2,…,wn的物品和一个最多能装载总质量为T的背包,能否从这n件物品中选择若干件物品装入背包,使得被选物品的总质量“恰好”等于背包所能装载的最大质量,即wi1+wi2+…+wik=T。若能,则背包问题有解,输出所有解;否则输出无解。

思路:这道题用来熟悉栈的基本操作,其中包含了栈的操作——初始化(InitStack)、置入元素(Push)、弹出元素(Pop)。从3月26号晚上一直到3月28号上午的程序设计课,我一直在修改找出问题,今天上午终于大功告成。背包问题有更简单的算法,这里只是用来熟悉C的语法和做栈的练习。

首先定义栈的函数——InitStack、Push、Pop:(CSDN贴C代码没有高亮真的难受..)

//背包问题(栈)
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR -1
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
//OK表示操作成功,ERROR表示操作出错,OVERFLOW表示申请空间或插入时溢出
//STACK_INIT_SIZE表示栈的初始空间,当栈的空间不够用时每次再申请STACKINCREMENT的空间
typedef struct {
	int *base;
	int *top;
	int stacksize;
}SqStack;
//定义栈结构。base为栈底指针,top为栈顶指针,stacksize为栈的空间。

这里为了便捷,直接将base和top的指针类型设置成int类型,实际上还可以:

#define ElemType int 
typedef struct{
	ElemType * top;
	ElemType * base;
	int stacksize;
}SqStack;

函数声明:

  • 16
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
影评案例是一个很好的Spark练习案例,可以帮助你熟悉Spark的基本操作和数据处理。下面我为你提供一个简单的影评案例,希望能帮助到你。 1. 数据准备 我们需要一份电影评分数据集,可以从MovieLens网站上下载到,这里我们使用ml-latest-small数据集,该数据集包含了用户对电影的评分、电影信息和用户信息等数据。 2. 数据处理 我们需要将数据导入到Spark中,并进行数据预处理。首先,我们需要将数据转换成DataFrame类型,然后对数据进行清洗和整理,例如去掉重复数据、缺失数据处理等。 以下是一个简单的处理代码: ``` from pyspark.sql.functions import col # 读取数据 ratings = spark.read.csv("ratings.csv", header=True, inferSchema=True) # 去重 ratings = ratings.dropDuplicates() # 处理缺失值 ratings = ratings.dropna() # 转换数据类型 ratings = ratings.withColumn("userId", col("userId").cast("int")) ratings = ratings.withColumn("movieId", col("movieId").cast("int")) ratings = ratings.withColumn("rating", col("rating").cast("double")) # 查看数据 ratings.show() ``` 3. 数据分析 我们可以使用Spark进行各种数据分析操作,例如对电影评分进行统计,找出评分最高的电影,计算每个用户的平均评分等。 以下是一个简单的分析代码: ``` from pyspark.sql.functions import desc, avg # 统计每个电影的评分数量和平均评分 movie_ratings = ratings.groupBy("movieId").agg({"rating": "count", "rating": "avg"}) movie_ratings = movie_ratings.withColumnRenamed("count(rating)", "num_ratings").withColumnRenamed("avg(rating)", "avg_rating") # 找出评分最高的电影 top_movies = movie_ratings.orderBy(desc("avg_rating")).limit(10) # 计算每个用户的平均评分 user_ratings = ratings.groupBy("userId").agg(avg("rating")) # 查看结果 top_movies.show() user_ratings.show() ``` 4. 结果展示 最后,我们可以将结果保存到文或数据库中,或者使用可视化工具展示结果。 以上是一个简单的Spark影评案例,希望能够帮助到你。如果你想深入学习Spark,可以尝试更复杂的案例和练习

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值