![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法设计
GhostRiderQin
这个作者很懒,什么都没留下…
展开
-
算法设计与分析----凸多边形最优三角剖分
#include<bits/stdc++.h>using namespace std;int w[10][10];int dp[10][10];int p[10][10];int W(int a,int b,int c){ return w[a][b]+w[b][c]+w[c][a]; }void print(int a,int b){ if(a == ...原创 2019-12-31 13:08:45 · 1865 阅读 · 0 评论 -
算法设计与分析----动态规划之数字三角形问题
题目:在数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或 右下走。只需要求出这个最大和即可,不必给出具体路径。三角形的行数大于1小于等于100,数字为 0 - 99。利用动态规划自底而上求解。#include<bits/stdc++.h>using namespace std;int dp[100][100];int ...原创 2019-12-31 12:47:33 · 2174 阅读 · 0 评论 -
算法设计与分析----马的周游路线
8 * 8的国际象棋棋盘上的一只马,恰好走过除起点外的其他63个位置各一次,最后回到起点,这条路线称为马的一条Hamilton周游路线。对于给定的m * n的国际象棋棋盘,m和n均为大于5的偶数,且|m-n|≤2,试设计一个分治算法找出马的一条Hamilton周游路线。下面的代码是实现,并不针对哪一到题,只是简单的实现,也没有用贪心优化。#include<bits/stdc++.h&...原创 2019-12-31 12:44:02 · 2359 阅读 · 0 评论 -
算法设计与分析----最优二叉树动态规划
概念就不赘述了。#include<bits/stdc++.h>using namespace std;double a[10],b[10];double dp[10][10];int s[10][10];double w[10][10];void print(int i,int j){ if(i > j) return ; printf("%d ",s[...原创 2019-12-31 12:40:22 · 2454 阅读 · 0 评论 -
算法设计与分析----最长公共子序列
给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence)。比如字符串1:BDCABA;字符串2:ABCBDAB则这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA对于这个问题,用一个二维数组记录两个字符串的状态,例如dp[2][3]表示的意思是A串前两个字符与B串前三个字符公共子序列的长度,所以dp的第一维的长度是A串的长度,dp第二...原创 2019-12-28 20:58:30 · 2323 阅读 · 0 评论 -
算法设计与分析----矩阵连乘
给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。例如,给定三个连乘矩阵{A1,A2,A3}的维数分别是10 * 100,100 * 5和5 * 50,采用(A1A2)A3,乘法次数为10 * 100 * 5 + 10 * 5 * 50=7500次,而采用A1(A2A3),乘法次...原创 2019-12-28 20:25:04 · 2814 阅读 · 0 评论 -
算法设计与分析----循环赛日程表
设有n个运动员,要进行网球循环赛。现在要设计一个满足以下要求的比赛日程表(1).每个选手必须与其他n-1个选手各赛一场(2).每个选手一天只能赛一次(3).循环赛一共进行n-1天此题一般都是用递归分治解决,但是就是有点麻烦,这次介绍一种简单点的方法:多边形轮转法。基本思路:当有奇数个人的时候画一个多边形,中心填0,例如当有5个人时,像这样:平行的人比赛,5<->2...原创 2019-12-28 17:38:45 · 3614 阅读 · 2 评论 -
算法设计与分析----棋盘覆盖
在一个2^k × 2^k (k≥0)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格。显然,特殊方格在棋盘中可能出现的位置有4^k 种,因而有 4^k种不同的棋盘,图4.10(a)所示是k=2时16种棋盘中的一个。棋盘覆盖问题(chess cover problem)要求用图4.10(b)所示的4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重...原创 2019-12-28 17:02:54 · 1834 阅读 · 1 评论 -
算法设计与分析----二分搜索(递归)
二分搜索有很多写法,在算法分析与设计中,二分搜索是在递归分治这一章讲到的,所以用递归实现一下。二分搜索其实很容易理解,设想一根从北京到上海的电线坏掉了,但是不知道是从哪里坏的,要怎样才能使用最少的步骤快速找到问题呢,那就是二分,先到北京与上海的中间位置,我们就称中点吧,测试一下电线,如果是北京到中点有电,那么就说明坏的位置位于上海到中点之间,我们再找到上海到中点的中点,依次类推,很快就能找到问题...原创 2019-12-28 16:19:40 · 2252 阅读 · 0 评论 -
算法设计与分析----半数集问题
半数集问题描述:给定一个自然数n,由n 开始可以依次产生半数集set(n)中的数如下。(1) n∈set(n);(2) 在n 的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;(3) 按此规则进行处理,直到不能再添加自然数为止。例如,set(6)={6,16,26,126,36,136}。半数集set(6)中有6 个元素。注意半数集是多重集。对于6的半数集来说,可以在6前加...原创 2019-12-28 16:04:05 · 2153 阅读 · 1 评论 -
算法设计与-分析---去重全排列
关于不去重的全排列上一节已经讲过了 →全排列问题去重全排列与之前的全排列不同的是,序列不一定是像12345这样每一个元素只出现过一次,有可能是这样的:112345,这样的话,之前的算法就会出现重复的情况,比如1跟1交换,那么就出现了重复,但如果在交换元素之前判断一下,之前是否有元素和当前要交换的元素一样,如果一样,那么就不交换。#include<bits/stdc++.h>usi...原创 2019-12-28 15:42:31 · 1487 阅读 · 0 评论 -
算法设计与分析----全排列问题
对于全排列问题,用到的是递归分治策略,对于12345的全排列来说,采用递归分治,划分为更小规模的子问题,要求12345的全排列,就要求2345的全排列,要求2345的全排列,就要求345的全排列,以此类推。#include<bits/stdc++.h>using namespace std;int f[10][10];void perm(int a[],int k,int m)...原创 2019-12-28 15:16:53 · 2232 阅读 · 0 评论 -
关于Unet训练时loss为负数的原因
最近用unet训练,但是训练时loss为 -5000左右,一个负数,绝对值还很大,其实这是训练集图片的格式不正确,我从unet的官方训练集下载下来mask看了一下,都是 1bit 的黑白图,但是我训练时是 8bit 的,所以要用到PIL中的Image.convert函数转换图像的位数,如果要转为1bit,需要用img = img.convert('1'),并且保存成png文件就可以了。...原创 2019-12-09 12:27:47 · 10042 阅读 · 0 评论 -
基础排序算法----堆排序
堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。#include<bits/stdc++.h>#define ilchil (i<<1)+1#define klchil (k<<1)+1 using namespace st...原创 2019-12-08 21:42:15 · 3468 阅读 · 0 评论 -
基础排序算法----选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。#include<bits/stdc++.h>using namespac...原创 2019-12-08 21:31:17 · 3255 阅读 · 0 评论 -
基础排序算法----希尔排序
希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组...原创 2019-12-08 21:29:58 · 2757 阅读 · 0 评论 -
基础排序算法----冒泡排序
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上...原创 2019-12-08 21:27:58 · 3721 阅读 · 0 评论 -
基础排序算法----快速排序
快速排序(Quicksort)是对冒泡排序的一种改进,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。#include<bits/stdc++.h>using namespace std;int a[100];v...原创 2019-12-08 21:26:18 · 3757 阅读 · 0 评论 -
基础排序算法----归并排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。时间复杂度为O(n log n) 。#include<bits/stdc++.h...原创 2019-12-08 21:24:24 · 2904 阅读 · 0 评论 -
基础排序算法----插入排序
插入排序,就是如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。#include<bits/stdc++.h>u...原创 2019-12-08 21:21:33 · 3604 阅读 · 0 评论