MIT:算法导论——15.动态规划

华为OJ 收录问题如下6. 质数因子 6. 质数因子 题目描述 功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )。最后一个数后面也要有空格 详细描述: 函数接口说明: public String getResult(long ulDataInput) 输入参数: long ulDataInput:输入的正整数 返回值: String 输入描... 阅读详情

【设计一个动态规划算法的四个步骤】

1、刻画一个最优解的特征。 (最优子结构?!)

2、递归地定义最优解的值。

3、计算最优解的值,通常采用自底向上方法。

4、利用计算出的信息构造一个最优解。


适合动态规划方法求解的最优化问题需要具备的两个性质:

【最优子结构(optimal substructure)】

问题的最优解由相关子问题的最优解组合而成,而这些子问题可以独立求解。(动态规划具体实现之处)

【重叠子问题(overlapping subproblem)】

如果递归算法反复求解相同的子问题,我们就称最优化问题具有重叠子问题性质。(动态规划实现优化之处)

【动态规划两种等价实现方法】

1、 带备忘的自顶向下法(top-down with memoizatioin)

2、自底向上方法(bottom-up method)


问题一:钢条切割

背景:长度为i的钢条价格为p[i],长为n的钢条的怎么切割有最大收益。

长度i:   1 2 3 4 5 6 7 8 9 10

价格p[i]: 1 5 8 9 10 17 17 20 24 30

方案:

收益r[i] = max(p[j],r[i-j]),j:[1,i]**********************************************(2)


#include <stdio.h>
#include <string.h>
#include <iostream>
#include <vector>

#define MAXINT 0x7FFFFFFF
#define MININT -(signed int)MAXINT - 1

using namespace std;

int bottom_up_cut_rod( int *p, int n, int *s );
int bp_cut_rod(vector<int> &vPrices, vector<int> &vCuts);
void output_cut_rod_solution(vector<int> &vPrices, vector<int> &vCuts);
int main( void )
{
	cout << "********最大值/最小值******************" << endl; 
	cout << MAXINT << endl;
	cout << MININT << endl;

	cout << "********动态规划:钢条切割最大收益*****" << endl;
	int p[] = { 0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30 };
	int n = sizeof( p ) / sizeof( int ) - 1;
	//cout << sizeof( p ) / sizeof( int ) << endl; // 输出11,sizeof(p),p为数组,为总大小44
	
	vector<int> vPrices(p, p + n + 1);
	vector<int> vCuts(n + 1);

	output_cut_rod_solution(vPrices, vCuts);
	cout << "最优解总数据:" << endl;
	for( int i = 0; i <= n; ++i )
		cout << vCuts[i] << " ";
	cout << endl;

	
	return 0;
}

/*
 * 动态规划算法——自底向上计算:钢条切割,求切为多长为最优解。
 * i = j + (i -j),即将长度为i的钢条分割为长度为j(整段)、长度为i - j(再分割段)的两段,
 * j = [1,i],即只且长为1的,至整段出售;而i - j在之前(bottom_up)已经计算。
 * rod[rɒd] n. 棒 —— cut rod
 *
 * 输出参数:int *s     输出参数,存储最优解
 * 返回值  :int	    长度为n的棒,最大收益
 * 
 */
int bp_cut_rod(vector<int> &vPrices, vector<int> &vCuts)
{
	vector<int>::size_type n = vPrices.size() - 1;
	vector<int> vRods(n + 1); // 长为i的最优价值
	// vRods.reserve(n + 1); // 此时如果直接访问,会报错;因为只是预留空间,并未初始化。
	vRods[0] = 0;

	for (vector<int>::size_type i = 1; i <= n; i += 1){ // 求长为i的最优收益
		int iSum = 0;
		int iVal = 0;
		for (vector<int>::size_type j = 1; j <= i; j += 1){
			iSum = vPrices[j] + vRods[i - j];
			if (iSum > iVal){
				iVal = iSum;
				vCuts[i] = j; // 记录最优解
			}
		}
		vRods[i] = iVal;
	}
	return vRods[n];
}

void output_cut_rod_solution(vector<int> &vPrices, vector<int> &vCuts)
{
	cout << "最优价值:" << bp_cut_rod(vPrices, vCuts) << endl;
	cout << "最优解:" << endl;
	
	int n = vCuts.size() - 1;
	while (n > 0){
		cout << vCuts[n] << endl;
		n -= vCuts[n];
	}
}


int bp_cut_rod(vector<int> &vPrices, vector<int> &vCuts) *******************************(3)

算法复杂度分析:

其内层for循环的迭代次数构成一个等差数列,所以运行时间复杂度为O(n^2)。


void output_cut_rod_solution(vector<int> &vPrices, vector<int> &vCuts) *******************(4)





==============================================

LCS最长公共子序列:不连续子序列和连续子序列

【最长公共子序列问题】longest-common-subsequence problem
给定两个序列X = <x1, x2, ..., xm>和Y = <y1, y2, ..., yn>,求X和Y的最长公共子序列。
【步骤1】刻画最长公共子序列的特征
定理15.1(LCS的最优子结构) 令X = <x1, x2, ..., xm>和Y = <y1, y2, ..., yn>为两个序列,
Z = <z1, z2, ..., zk>为X和Y的任意LCS。有:
(1)如果xm = yn,则zk = xm = yn, 且Zk-1是Xm-1和Yn-1的一个LCS。
(2)如果xm != yn,那么zk != xm意味着Z是Xm-1和Y的一个LCS。
(3)如果xm != yn,那么zk != yn意味着Z是X和Yn-1的一个LCS。
【步骤2】一个递归解
【LCS问题的重叠子问题性质】为求X和Y的一个LCS,我们可能需要求Xm-1和Y的一个LCS以及X和Yn-1的一个LCS,
但是这个子问题都包含求解Xm-1和Yn-1的LCS的子问题。
设计递归算法,首先要设计最优解的递归式:
c[i,j] = { 0 if i == 0 || j == 0
  { c[i-1, j-1] + 1if i,j > 0 && Xi == Yj
  { max(c[i-1, c[j-1])if i,j > 0 && Xi != Yj
【步骤3】计算LCS的长度
(1)采用自底向上方法
(2)c[i, j]保存在表c[0...m, 0...n]中,并按行主次序。
(3)表b[0...m, 0...n]保存c[i,j]所选择的子问题,以构造最优解
【步骤4】构造LCS
从b[m, n]开始,向上追踪:当箭头(→)指向左上角时,xi == yj。


【当要求必须连续时】
c[i,j] = { 0 if i == 0 || j == 0
  { c[i-1, j-1] + 1if i,j > 0 && Xi == Yj
  { 0 if i,j > 0 && Xi != Yj
(1)由于要求连续则Xi和Yj一定为结尾的字符,当i,j > 0 && Xi != Yj时,c[i, j] = 0。
(2)当if i,j > 0 && Xi == Yj,需要记录X的low,high,max.以及tmpL,tmpH,tmpMax = 0。


不要求连续的代码实现:

#ifndef ALGORITHM_H
#define ALGORITHM_H

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <bitset>

#include <string>
#include <vector>
#include <list>
#include <queue>
#include <stack>

#include <utility>
#include <map>
#include <set>

#include <numeric>
#include <algorithm>

#endif

#include "algorithm.h"
#define LEFT	1
#define LU		0
#define UP		2

using namespace std;

int lcs_length(string &sX, string &sY);
int main(void)
{
	string sX("abcbdab");
	string sY("bdcaba");
	cout << lcs_length(sX, sY) << endl;

	return 0;
}


int lcs_length(string &sX, string &sY)
{
	int m = sX.size();
	int n = sY.size();
	int **c = new int*[m + 1];
	int **b = new int*[m + 1];
	for (int i = 0; i <= m; i += 1){
		c[i] = new int[n + 1];
		b[i] = new int[n + 1];
	}

	for (int i = 0; i <= m; i += 1){
		for (int j = 0; j <= n; j += 1){
			if (i == 0 || j == 0){
				c[i][j] = 0;
				b[i][j] = 3;
			}else if (sX[i - 1] == sY[j - 1]){
				c[i][j] = c[i - 1][j - 1] + 1;
				b[i][j] = LU;
			}else{
				if (c[i - 1][j] > c[i][j - 1]){
					c[i][j] = c[i - 1][j];
					b[i][j] = UP;
				}else{
					c[i][j] = c[i][j - 1];
					b[i][j] = LEFT;
				}
			}
			cout << c[i][j] << "," << b[i][j] << "\t";
		}// end-for
		cout << endl;
	}// end-for

	int i = m;
	int j = n;
	stack<char> stCh;
	while (i > 0 && j > 0 && c[i][j] > 0){
		if (b[i][j] == LU){
			stCh.push(sX[i - 1]);
			i -= 1;
			j -= 1;
		}else{
			if (b[i][j] == UP){
				i -= 1;
			}else{
				j -= 1;
			}
		}
	}
	while (!stCh.empty()){
		cout << stCh.top();
		stCh.pop();
	}
	cout << endl;
	int nLCSLen = c[m][n];

	for (i = 0; i <= m; i += 1){
		delete [] c[i];
		delete [] b[i];
	}
	delete [] c;
	delete [] b;
	return nLCSLen;
}






MIT 6.006算法导论课程:从理论到实践的系统学习指南 算法是计算机科学的核心基础,它研究如何高效、优雅地解决问题。其原理在于通过定义明确的计算步骤,在有限时间内将输入转化为期望的输出,核心价值在于提升程序的执行效率与资源利用率。掌握算法设计与分析能力,对于开发高性能软件、通过技术面试、参与竞赛以及理解复杂系统都至关重要。本文以麻省理工学院(MIT)经典的《6.006 算法导论》课程资源为具体载体,详细介绍了如何系统性地学习数据结构、动态规划、贪心算法等核心内容。文章提供了从资源获取、环境配置到实践验证的完整路径,并强调了动手实现与复杂度分析的重要性,旨在帮助学 阅读详情

相关推荐

算法导论第四版

算法导论第四版介绍

计算机、人工智能、算法和数学 2953

素数伴侣-动态规划

描述:  题目描述 若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数中挑选出若干对组成“素数伴侣”,挑选方案多种多样,例如有4个正整数:2,5,6,13,如果将5和6分为一组中只能得到一组“素数伴侣”,而将2和5、6和13编组将得到两组“素数伴侣”,能组成“素数伴侣”最多的方案称为“最

引力空间 5030

总结算法1:动态规划及其模版

动态规划算法思想: 动态规划是1957年理查德,贝尔曼在《Dynamic Progranmming》中提出的方法,“Programming”的意思不是编程,而是一种表格处理方法:我们把每一步得到的子问题结果储存在表格里,所以在下一次遇见这个子问题的时候就不需要再重新求解一遍了,只需要查询表格,取出第一次求得的解即可。 动态规划也是一种分治思想,但与分治算法不同的是: 分治算法把原问题分解为若干各不相交的子问题,自顶向下地求解各子问题,然后合并子问题的解从而得到原问题的解; 而动态规划同样

m0_72979740的博客 285

算法导论-第15章-动态规划

(dynamic programming)的思想是和。动态规划方法通常用来求解这类问题可以有很多可行的解,每个解都有一个值,我们希望寻找具有最优值(最小值或最大值)的解。我们称这样的解为问题的(an optimal solution),而不是(the optimal solution),因为可能有多个解都是最优值。步骤1~3是动态规划求解问题的基础。如果我们仅仅需要最优解的一个值,而不是最优解本身,可以忽略步骤4。如果要构造最优解,则必须执行步骤4,步骤3中维护的一些额外信息是构造最优解的基础。

优快云博客 959

从零开始:在Windows WSL中搭建Openfoam7+blastfoam2.0.0开发环境(避坑大全)

本文详细指导在Windows WSL中搭建OpenFOAM 7与BlastFOAM 2.0.0开发环境,重点解析了安装过程中的常见“坑点”,如编译模式不匹配导致的符号错误,并提供了从系统准备、软件部署到环境验证的完整解决方案,帮助开发者高效构建CFD与爆炸模拟开发平台。

stem5的博客 526

【智能教育实践】MOOPer数据集在个性化学习路径规划中的应用

本文探讨了如何利用MOOPer数据集实现从“千人一面”到“千人千面”的个性化学习路径规划。通过分析学习者与平台的交互数据(如练习、反馈、讨论)并结合知识图谱,系统能够动态诊断学生知识状态,并为其推荐最优学习序列。文章详细介绍了基于数据驱动的推荐系统核心技术,包括知识追踪、图谱关联挖掘及排序策略,旨在解决传统在线教育的僵化问题,提升学习效率与动力。

read5的博客 230

华为笔试题库之困难--难度

题记:若立志投身算法研究,可精研理论算法:动态规划、递归、深度搜索等;若以解决问题为目的,主要为了工作内容,当尝试快而简单的方法,这该是学习的本意。 1.素数伴侣 素数又叫质数(prime number),有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。 方案一:匈牙利算法 偶数+偶数=偶数,必不是素数,因此素数只能是奇数+偶数。我们把输入的这一组数分成奇数和偶数,就得到了二分图,在这两组之间用匈牙利算法作匹配。 1.首先我们遍历一遍所有数字,建立他们之间所有可能的联系,便.

yohnyang的博客 527

planning模块(6)-参考线的平滑(二次规划)

上一篇已经介绍了采样点生成锚点数据的过程,并且将所有采样点生成的锚点数据设置到了平滑器中.接下来继续介绍使用二次规划平滑参考线的算法过程.从锚点数据中提取坐标存入raw_point2d,提取横向边界存入anchorpoints_lateralbound,将起点和终点的横向边界设置为0,防止车在起点和终点位置偏离车道中心线.

让复杂的问题变得更容易理解 787

【求int型正整数在内存中存储时1的个数】

0-1背包问题 合唱队 素数伴侣 密码截取

weixin_45079449的博客 594

YOLO26涨点改进 | YOLO联合Mamba火热发论文改进篇 | CVPR 2025 | 引入EfficientViM 新型轻量级视觉Mamba,高效捕捉全局依赖,含二次创新、适合目标检测任务

本文提出EfficientViM,一种基于HSM-SSD的新型轻量级视觉Mamba架构,用于改进YOLO26目标检测模型。该模块通过压缩隐藏状态、多阶段特征融合和内存优化设计,在降低计算复杂度的同时提升检测精度。实验表明,EfficientViM在ImageNet-1K上实现了最佳的速度-精度平衡,相比SHViT模型性能提升0.7%且速度更快。文章详细介绍了模块原理、网络结构、核心代码实现及YOLO26集成方法,提供两种改进方案,适用于资源受限环境下的实时目标检测任务。

Ai缝合怪、助力小伙伴高效发论文 176

服务器搭建原神私服教程

项目的稳定版分支提供了编译好的服务端程序,但是博主觉得还是用dev版本的比较好。dev版本需要自己编译的,不要听到编译这两个字就头大,相反,这个服务端的编译相当简单。把文件中的两个IP地址127.0.0.1修改为你服务器的地址,修改完成后按 esc 输入 :wq。Mongodb作为服务端的数据库使用,我们这里安装最新版的Mongodb5。注意:如果想要使用最新版的服务端,必须安装>=17版本的java。tmux可以保证你关掉控制台的时候,程序依然继续运行。至此,服务端所需要的运行环境全部配置完成。

用最简单的方式说最重要的事!服务器、存储、云计 算、A智能的大数据产品、游戏开发技术。致力于广 大开发者、政企用户、各项机构等,构建云上世界提供全方位云计算解决方案。旨在打造差异化的开放式闭环生态系统帮助用户快速构建稳定、安全的云计算环境。 1万+

MIT算法导论公开课之课程笔记

MIT算法导论公开课之第1课 课程简介及算法分析 MIT算法导论公开课之第2课 渐进符号、递归及解法 MIT算法导论公开课之第3课 分治法 MIT算法导论公开课之第4课 快排及随机化算法 MIT算法导论公开课之第5课 线性时间排序 MIT算法导论公开课之第6课 顺序统计、中值 MIT算法导论公开课之第7课 哈希表 MIT算法导论公开课之第8课 全域哈希和完全哈希 MIT算法导论公开...

rye_whiskey的博客 1万+

工业级C#+YOLOv8缺陷检测系统:准确率98.5%、延迟<50ms的完整实现

本文分享了基于C#和YOLOv8的工业级表面缺陷检测系统实现方案。针对汽车零部件冲压件检测需求(60件/分钟,准确率>98%,延迟<100ms),作者对比了多种技术方案后选择了C#+YOLOv8+ONNX Runtime的组合,最终实现98.5%准确率和42ms延迟。 系统采用分层模块化架构,包含硬件层、采集层、推理层、业务层和控制层。核心优势包括:1)C#在工业环境下的稳定性和集成便利性;2)YOLOv8对复杂缺陷的泛化能力;3)ONNX Runtime GPU加速提升性能。文章详细介绍了硬件

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1140

MIT 6.006算法导论:从数据结构到动态规划的完整学习指南

算法与数据结构是计算机科学的核心基础,它们通过定义数据组织方式和问题求解步骤,构建了软件系统的效率基石。其原理在于利用时间与空间复杂度的权衡,通过渐进分析(如大O表示法)评估不同策略的性能。掌握这些基础概念的技术价值在于,它能培养开发者抽象问题、设计高效解决方案的系统性思维,而不仅仅是编写代码。这种能力在搜索引擎优化、数据库索引、网络路由等应用场景中至关重要,直接决定了系统的响应速度与资源利用率。本文聚焦于MIT 6.006这门经典课程,它体系化地讲解了从哈希表、二叉堆等基础数据结构到动态规划、图算法等高级

weixin_30824599的博客 340

一个服务如何被找到、被调用、被看见:注册中心、发布注册、发现调用与服务监控的治理闭环

服务数量一多,“对方在哪儿”就成了时刻变化的变量。本文沿发布、注册、发现、调用、监控的治理闭环展开:注册中心的数据模型、健康检查与AP/CP取舍,自我保护、推空保护与本地快照三道自保机制;服务发布的启动器、动态代理、发布管理器、协议服务器与登记顺序;消费端的服务目录、请求ID配对、六种集群容错与三种发现模式;日志、指标、链路三支柱与熔断舱壁。配套五个Java演示程序实测:默认参数下宕机实例平均240秒才被摘除,优雅下线可降至45秒,统计窗口长于租约会让自我保护失效,尾部采样可捕获全部慢请求。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 169万+

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

AI人人懂 371

MIT算法导论公开课之第15课 动态规划、最长公共子序列

动态规划(Dynamic programming): 动态规划是一种设计技巧,而不是一种特定的算法,就像分治法一样。 最长公共子序列(Longest common subsequence)问题: 有两个序列,序列x[1~m],序列y[1~n],找到它们的最长公共子序列,子序列不需要在原序列中占用连续的位置(最长公共子串要求连续),子序列可能不唯一。 Ex: x:A...

rye_whiskey的博客 2066

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

算法导论中英文版下载

算法导论:  学过计算机的都知道,这本书可以说是全世界最权威的算法课程的大学课本了,基本上全世界的名牌大学用的教材都是它。这本书一共四位作者,Thomas H. Cormen,Charles E. Leiserson 和 Ronald L.Rivest 是来自 MIT 的教授,Clifford Stein 是MIT出来的博士,现在哥伦比亚大学做教授,四人姓氏的首字母联在一起即是此书的英文简称(

首席技术执行官CTO(Chief Technology Officer)|技术总监--邓斌博客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MIT 6.006算法导论公开课:从数据结构到算法范式的系统学习指南

算法是计算机科学的核心,它研究如何高效、系统地解决问题。其原理在于通过精确的步骤描述和数据结构组织,将复杂问题分解为可管理的子问题。掌握算法思维的技术价值在于,它能从根本上提升开发者分析问题、设计解决方案和优化程序性能的能力,是应对复杂业务场景、进行系统架构设计的底层支撑。动态规划和图算法是算法领域的两大关键技术,广泛应用于路径规划、资源分配、序列比对和网络分析等场景。本文以MIT 6.006《算法导论》公开课为蓝本,详细拆解了如何系统性地学习从基础数据结构到高级算法范式的完整知识体系,并提供了针对动态规划

weixin_33951761的博客 460

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【转载】算法导论学习笔记

参考出处 链接: [https://blog.csdn.net/rye_whiskey/article/details/82216352] 作为记录我的算法之路的起点!!!! 简介 此算法导论课程为麻省理工学院的官方课程录像,以《算法导论》为教材,授课老师为这本书的作者Charles Leiserso...

qq_35982713的博客 232

算法导论学习笔记——动态规划

本文系转载,原文地址:http://www.cppblog.com/Fox/archive/2008/05/07/Dynamic_programming.html 以前在学习非数值算法的时候,曾经了解过动态规划算法(Dynamic programming),以下是对Wiki

FG2006的专栏 5297

MIT 算法导论 (四) Divide and Conquer

MIT 算法导论 (四) Divide and Conquer Steps: Divide the problem (instance) into subproblems. Conquer the subproblems by solving them recursively. Combine subproblem solutions...

weixin_34018169的博客 133

计算机算法导论第三版算法视频讲解

算法导论》第三版是一本深度与广度兼备的经典算法教材,它不仅适合作为大学教材,也是技术专业人士的宝贵参考书。点击链接,打开【快手】直接观看!这本书的价值不仅在于教授具体的算法,更在于培养读者算法思维和分析能力,这是计算机科学教育的核心目标之一。书名:Introduction to Algorithms(中文译名:算法导论)2 在线课程:Coursera、edX等平台有基于本书的算法课程。计算机算法导论第三版的免费视频,会陆续不断更新算法视频。2 准备面试:重点学习排序、数据结构、图算法等核心章节。

kupePoem的专栏 1067

动态规划算法和贪婪算法的区别

如果看教科书,经常会看到,动态规划算法适用条件有三个: 1.最优化原理(最优子结构性质)  最优化原理可这样阐述:一个最优化策略具有这样的性质,不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。简而言之,一个最优化策略的子策略总是最优的。一个问题满足最优化原理又称其具有最优子结构性质。 2.无后效性  将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,

MulinB的技术博客 4825

算法设计与分析_算法导论(CLRS)骨灰级笔记分享:目录

倘若你去问一个木匠学徒:你需要什么样的工具进行工作,他可能会回答你:“我只要一把锤子和一个锯”。但是如果你去问一个老木工或者是大师级的建筑师,他会告诉你“我需要一些精确的工具”。由于计算机所解决的问题都是从生活中抽象出来的问题,其复杂性不言而喻,所以我们需要这样精确有效的工具去解决现实生活中的复杂问题。算法、数据结构都是程序设计中必不可少的精确工具。算法的重要性是每一个程序员都十分清楚的...

weixin_39628180的博客 562

计算机算法导论第三版视频讲解

算法导论》第三版是一本深度与广度兼备的经典算法教材,它不仅适合作为大学教材,也是技术专业人士的宝贵参考书。这本书的价值不仅在于教授具体的算法,更在于培养读者算法思维和分析能力,这是计算机科学教育的核心目标之一。书名:Introduction to Algorithms(中文译名:算法导论)2 在线课程:Coursera、edX等平台有基于本书的算法课程。使用渐进符号(大O、大Θ、大Ω)进行复杂度分析。2 准备面试:重点学习排序、数据结构、图算法等核心章节。出版社:MIT Press(麻省理工学院出版社)

kupePoem的专栏 1115
上一篇: ImportError: No module named MySQLdb解决办法
下一篇: PHP学习起步1:获取文件大小,类型,创建/修改时间
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值