![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记
一团糟~
这个作者很懒,什么都没留下…
展开
-
01背包问题(动态规划)
1. 题目介绍有 NN 件物品和一个容量为 VV 的背包,每件物品有各自的价值且只能被选择一次,要求在有限的背包容量下,装入的物品总价值最大。「0-1 背包」是较为简单的动态规划问题,也是其余背包问题的基础。动态规划是不断决策求最优解的过程,「0-1 背包」即是不断对第 ii 个物品的做出决策,「0-1」正好代表不选与选两种决定。2. 题解代码(C++)2.1 版本1 二维(1)状态 f[i][j] 定义:前 i 个物品,背包容量 j 下的最优解(最大价值):当前的状态依赖于之前的状态,可以理解为从初原创 2022-07-09 10:07:21 · 273 阅读 · 1 评论 -
浅谈暴力枚举
枚举(英语:Enumerate)是基于已有知识来猜测答案的一种问题求解策略。枚举的思想是不断地猜测,从可能的集合中一一尝试,然后再判断题目的条件是否成立。建立简洁的数学模型。枚举的时候要想清楚:可能的情况是什么?要枚举哪些要素?枚举的范围是什么?是所有的内容都需要枚举吗?在用枚举法解决问题的时候,一定要想清楚这两件事,否则会带来不必要的时间开销。根据题目判断。比如例题中要求的是最大的符合条件的素数,那自然是从大到小枚举比较合适。以下是一个使用枚举解题与优化枚举范围的例子。一个数组中的数互不相同,求其中和为0原创 2022-06-28 13:09:23 · 190 阅读 · 0 评论 -
希尔排序法
希尔排序(英语:Shell sort),也称为缩小增量排序法,是 插入排序 的一种改进版本。希尔排序以它的发明者希尔(英语:Donald Shell)命名。排序对不相邻的记录进行比较和移动:希尔排序是一种不稳定的排序算法。希尔排序的最优时间复杂度为 希尔排序的平均时间复杂度和最坏时间复杂度与间距序列的选取(就是间距如何减小到 1)有关,比如「间距每次除以 3」的希尔排序的时间复杂度是 。已知最好的最坏时间复杂度是。希尔排序的空间复杂度为...原创 2022-06-28 12:54:17 · 217 阅读 · 0 评论 -
贪心算法介绍
贪心算法(英语:greedy algorithm),是用计算机来模拟一个“贪心”的人做出决策的过程。这个人十分贪婪,每一步行动总是按某种指标选取最优的操作。而且他目光短浅,总是只看眼前,并不考虑以后可能造成的影响。可想而知,并不是所有的时候贪心法都能获得最优解,所以一般使用贪心法的时候,都要确保自己能证明其正确性。贪心算法在有最优子结构的问题中尤为有效。最优子结构的意思是问题能够分解成子问题来解决,子问题的最优解能递推到最终问题的最优解。1贪心算法有两种证明方法:反证法和归纳法。一般情况下,一道题只会用到其原创 2022-06-28 12:20:26 · 231 阅读 · 0 评论 -
递归&分治
递归(英语:Recursion),在数学和计算机科学中是指在函数的定义中使用函数自身的方法,在计算机科学中还额外指一种通过重复将问题分解为同类的子问题而解决问题的方法。分治(英语:Divide and Conquer),字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。递归的基本思想是某个函数直接或者间接地调用自身,这样原问题的求解就转换为了许多性质相同但是规模更小的子问题。求解时只需要关注如何把原问题划分成符原创 2022-06-28 10:58:00 · 1576 阅读 · 0 评论 -
快速排序算法
快速排序算法是对冒泡排序的一种改进方法void QuickSort(Type a[],int p,int r){ if(p<r) { int q=Partition(a,p,r); QuickSort(a,p,q-1); //对左半端排序 QuickSort(a,q+1,r); //对右半段排序 }}int Partition(int a[],int p,int r){ int i = p,j = r + 1; int t; int x = a[p]原创 2022-03-05 15:17:32 · 536 阅读 · 1 评论 -
快速幂算法
给定实数a和正整数n,用分治法设计求的快速算法//递归算法double exp2(double a,int n){ if(a==0) return 0; if(n<=0) return 1; else { int x=exp(a,n/2); if(n%2) return a*x*x; else return x*x; }} 非递归0 1 0 1 1 1 0 1 ...原创 2022-03-05 14:17:18 · 133 阅读 · 0 评论 -
二分搜索技术(递归与非递归)
给定已按升序排好序的n个元素a[0,n-1],现要在这n个元素中找到一特定元素x。分析:如果n=1即只有一个元素,则只要比较这个元素和x就可以确定x是否在表中。设在a[l:r]中找x,m=(l+r)/2(0)如果x==a【m】,则找到;(1)如果x<a【m】,则继续在a【l,m-1】中找x即可;(2)如果x>a【m】,则继续在a【m+1,r】中找x即可;子问题答案就是大问题的答案//递归 int BiSearch(Type a[],const Type &.原创 2022-03-05 13:56:34 · 567 阅读 · 0 评论 -
顺序查找(数组,顺序表,单链表C语言实现)
顺序查找(SequentialSearch)又叫线性查找,是最基本的查找技术,它的查找过程是:从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录;如果直到后一个(或第一个)记录,其关键字和给定信比较都不等时,则表中没有新金录,査找不成功。1.数组实现#include<stdio.h>#include<stdlib.h>typedef int KeyType;typede...原创 2021-11-29 22:25:58 · 3143 阅读 · 0 评论 -
图的深度优先遍历递归算法(输出到文件)
图的深度优先遍历递归算法(输出到文件)----C语言实现#include <stdio.h>#define MaxVex 100 //最大顶点数#define MaxNum 65535 //表示∞#define TRUE 1#define FALSE 0typedef char VertexType; //顶点类型typedef int EdgeType; //权值类型typedef int Bool;Bool v..原创 2021-11-29 20:34:46 · 1244 阅读 · 0 评论 -
二叉树的前中后序遍历(非递归)C++
用一个链栈实现二叉树的前中后序的非递归遍历,(递归已发),用C++语言实现(文件后缀名为cpp)#include<bits/stdc++.h>using namespace std;typedef char TElemType;typedef struct BiTNode //二叉树结点结构{ TElemType data; struct BiTNode *Lchild, *Rchild;}BiTNode, *BiTree;typedef struct Stac..原创 2021-11-29 18:54:12 · 1028 阅读 · 0 评论 -
图的建立(邻接矩阵)与其深度优先和广度优先遍历
数据结构原创 2021-11-28 22:27:40 · 10893 阅读 · 0 评论 -
二叉树的遍历
数据结构原创 2021-11-28 18:40:58 · 230 阅读 · 0 评论 -
头插法建立单链表
数据结构原创 2021-11-27 14:24:19 · 779 阅读 · 0 评论 -
尾插法建立单链表
数据结构原创 2021-11-27 14:13:13 · 1001 阅读 · 0 评论