01_绪论

1、数据结构二元组(D, R)分别代表什么?

        D代表数据元素的又穷集合,R代表D上关系的集合

2、数据结构包括哪两种结构?

        数据的逻辑结构,数据的存储结构

3、数据的逻辑结构和数据的存储结构之间的关系是什么?

        数据的逻辑结构面向所解决的问题,反应了数据内部的构成方式;而数据的存储结构面向计算机,目标是将数据及其逻辑关系存储到计算机的存储器中。一般情况下,一种逻辑结构可以采用多种存储结构来存储,而采用不同的存储结构,其对数据的处理效率往往不同

4、数据的逻辑结构可否独立数据的存储结构考虑,反之,数据的存储结构可否独立于数据的逻辑结构考虑?

        数据的逻辑结构可以独立于数据的存储结构,这时因为数据的逻辑结构设计师在数据的分析阶段进行的,二数据的存储结构设计则是在数据的设计阶段进行的。反之,数据的存储结构不能独立于数据的逻辑结构,这是因为数据的存储结构是数据的逻辑结构在计算机存储中的映像。

5、具有某种逻辑结构数据在不同的存储结构下对其实施某种操作,其操作的时间效率可能不同,这种说法对吗?举例说明

        正确。例如在长度为n的线性表中进行插入和删除操作,当线性表位顺序存储结构时,平局移动将近一半的数据元素的位置,操作时间复杂度位O(n),而在链式存储结构下则不需要移动数据元素的位置,操作时间复杂度为O(1),与线性表的长度无关。

6、算法的基本特性之一由算法的外部提供 n>=0个有限操作作为算法的输入。这里的0个输入表示什么意思?

        0个输入指算法的输入不是通过键盘或者其他设备输入的,而是有算法的内部确定初始条件,或者通过算法内部诸如复制语句等方式给出所需要的变量的初值,被认为是一种特殊的输入,因此,在某些特殊情况下,一个算法可以没有输入。

7、“一个算法是正确的”是什么意思?

        指当输入一组合理的数据时,能够在有限的运行时间内得出正确的结果,对于不合理的输入数据,能够给出相应的警告提示信息。

8、衡量一个算法质量优劣的基本标准是什么?

        通常包括5个方面:1 算法的正确性,2 算法的的易读性,3 算法的健壮性, 4 算法的可移植性,5 算法的时空效率。

9、影响一个算法的时间效率的主要因素有哪些?

        主要因素包括两个方面。1、解决的问题规模大小。2、算法执行“基本操作”的次数

10、已知在同一运行环境下实现相同功能的两个算法A和B,其中算法A的时间复杂度为O(2^n),算法B的时间复杂度位O(n^2),仅就时间复杂度而言,哪个更好?

        分别对算法A和B时间复杂度取对数,得到nlog2和2logn,

        所以n<4时A的时间复杂度不大于B的时间复杂度

        n=4时,两个算法复杂度相同

        n>4时,B算法好于A算法

回溯法是一种通过不断地尝试解决问题的方法来找到问题解决方案的算法。而0/1背包问题是指在给定的一组物品中,选择一些物品装入背包,使得背包能够承载的重量最大,同时物品的总价值最大。下面是使用回溯法解决0/1背包问题的步骤: 1. 定义一个函数backtrack来实现回溯过程,该函数需要传入当前考虑的物品编号、当前已经装入背包的物品重量和价值、剩余物品的重量和价值、背包的总重量以及当前的最大价值。 2. 在backtrack函数中,首先判断是否已经考虑完了所有的物品,如果是,则更新最大价值并返回。 3. 如果还有物品没有考虑,则分别考虑将该物品装入背包和不装入背包两种情况。 4. 如果将该物品装入背包后不超重,则更新当前的物品重量和价值,并继续考虑下一个物品。 5. 如果将该物品装入背包后超重了,则直接返回。 6. 如果不将该物品装入背包,则直接考虑下一个物品。 7. 在考虑完所有物品后,返回当前的最大价值。 下面是使用回溯法解决0/1背包问题的Python代码: ```python def backtrack(i, cur_weight, cur_value, weight, value, max_weight, max_value): if i == len(weight): if cur_value > max_value: max_value = cur_value return max_value if cur_weight + weight[i] <= max_weight: max_value = backtrack(i+1, cur_weight+weight[i], cur_value+value[i], weight, value, max_weight, max_value) max_value = backtrack(i+1, cur_weight, cur_value, weight, value, max_weight, max_value) return max_value # 测试代码 weight = [2, 2, 6, 5, 4] value = [6, 3, 5, 4, 6] max_weight = 10 max_value = 0 print(backtrack(0, 0, 0, weight, value, max_weight, max_value)) # 输出:15 ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值