![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法设计与分析课程记录
宇间星辰
这个作者很懒,什么都没留下…
展开
-
算法设计与分析:最优三角划分
问题描述一个n个角的凸多边形,用互不相交的弦将其分为一个个的三角形,每个三角形的权值都是由三角形的边和弦组成权值函数w,求解如何划分才能使所有的角上的权值和达到最小。解题思路多边形内取一个三角形,证明其为当前最优取法,然后依次在未划分的多边形区域内取三角形,并且证明其为最优取法,与上一步三角形权值相加,为最优取法,依次推导,直到划分完全手绘示例...原创 2021-03-24 20:11:28 · 408 阅读 · 0 评论 -
算法设计与分析:矩阵连乘问题(动态规划与备忘录算法对比)
问题描述给定n个矩阵:A1,A2,…,An,其中Ai与Ai+1是可乘的,i=1,2…,n-1。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。动态规划解题思路矩阵链构造函数:构造m[][]和s[][]m中存储的值是计算出来的最小乘法次数,比如m[1][5]就是A1A2A3A4A5的最小乘法次数s中存储的是获取最小乘法次数时的断链点,s[1][5]对应的就是如何拆分A1A2A3A4A5,比如s[1][5]=3可表示:(A1A2A3)(A4A5),当然内部断链还会继续划分原创 2021-03-24 17:06:37 · 1794 阅读 · 0 评论 -
算法设计与分析:多重背包问题
问题描述给定n个物体(它们的重量为:w1,w2,…,wn,价值为:v1,v2,…,vn) 和 一个承受重量为W的背包,每个物品有n件,问怎么选取这些物体,放在背包中(不超过背包的承重),让所取的子集达到最大价值解析思路在0-1背包基础上,即递推每一个物品放置之前和放置之后价值的对比的前提下,物品数量限制k变为n递推式F( i , j )=max{ F ( i-1 , j-k* wi ) + k* wi }0<= k< ni;i = [0 , n] j = [0 , w]F(i原创 2021-03-24 17:05:53 · 1602 阅读 · 0 评论 -
leetcode记录
1 两数之和1.1 题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。你可以按任意顺序返回答案。1.2 解题思路循环遍历给定数组,依次相加与所求答案对比,成功后返回下标为了避免数组下标相等,循环时要求两层遍历不能为同一个位置1.3 代码实现#include <stdio.h>int* twoSum(int* nums,原创 2021-03-17 22:15:05 · 63 阅读 · 0 评论 -
算法设计与分析:字符串查找函数实现
原理遍历数组,依次对比元素C语言代码实现#include <stdio.h>//find string in string, return the first start location or -1 if can not findint StringFind(const char *pSrc, const char *pDst){ int i, j; for (i=0; pSrc[i]!='\0'; i++) { if(pSrc[i]!=pDst[0]) conti原创 2021-03-17 20:11:46 · 154 阅读 · 0 评论 -
算法设计与分析:常用的数据结构
数组数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组。堆栈栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又原创 2021-03-17 20:06:40 · 290 阅读 · 0 评论 -
算法设计与分析:归并排序(c+java)
算法简介归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并时间复杂度O(nlogn)稳定性稳定算法原理将大数组依次拆分为小数组,依次对小数组进行排序,小数组排好序后,再按顺序进行合并算法动态展示java 代码实现public class test{原创 2021-03-17 20:00:54 · 423 阅读 · 0 评论 -
算法设计与分析:快速排序(c+Java)
算法简述快速排序(Quicksort)是对冒泡排序算法的一种改进。快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。时间复杂度平均时间复杂度:O(nlog2n)稳定性不稳定原理先从数列中取出一个数,作为基准数(简单取第一个数作为基准数)分区过程:将比基准数大的数字全放在其原创 2021-03-10 12:21:13 · 188 阅读 · 0 评论 -
算法设计与分析:冒泡排序(c+Java)
算法设计与分析:冒泡排序(c+Java)算法简述算法核心时间复杂度稳定性原理算法动态展示Java代码实现c语言代码实现算法简述冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧原创 2021-03-10 12:00:53 · 228 阅读 · 0 评论