【2019 GDUT Winter Training V ( 算法优化)】教程文章相关的互联网学习教程文章

《数据结构与算法分析:C语言描述》复习——第十章“算法设计技巧”——矩阵连乘问题【代码】

2014.07.07 15:47简介:  给定N个矩阵,A1、A2、...、An,如果相邻矩阵的维度都满足相乘条件,如何组织这n-1次乘法的顺序,使得总共的乘法次数最少?描述:  根据矩阵乘法的定义,如果矩阵X的维度是aXb,矩阵Y的维度是bXc。那么XY相乘需要的乘法次数是aXbXc。  这道题目是典型的动态规划问题。从使用者的角度来看,动态规划问题通常的应用情景主要有两个特点:    1. 暴力搜索能够得出答案,但速度实在太慢。如果用空间换...

《算法导论》中动态规划求解钢条切割问题【代码】

动态规划算法概述 动态规划(dynamic programming)1是一种与分治方法很像的方法,都是通过组合子问题的解来求解原问题。不同之处在于,动态规划用于子问题重叠的情况,比如我们学过的斐波那契数列。在斐波那契数列的求解问题中,我们经常要对一个公共子问题进行多次求解,而动态规划算法,则对每个子问题只求解一次,将其解保存在一个表格中,从而避免了大量的冗余计算量。 动态规划算法常用于寻找最优解问题(optimization pro...

经典面试算法题:线性查找有序二维数组【代码】【图】

从右上角开始搜索,当前的元素map[x][y]和要搜索的数n有如下可能:map[x][y]==n --> 返回truemap[x][y]>n --> 向左移动map[x][y]<n --> 向下移动 搜索过程例子: AC代码:import java.util.Scanner;publicclass Main {publicstaticvoid main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();int m=sc.nextInt();int k=sc.nextInt();int x[][]=newint[n][m];for(int i=0;i<n;i++){for(int j=0;j<m;j++){...

遗传算法解决3SAT问题(C++实现代码)【代码】【图】

1 SAT问题描述命题逻辑中合取范式 (CNF) 的可满足性问题 (SAT)是当代理论计算机科学的核心问题, 是一典型的NP 完全问题.在定义可满足性问题SAT之前,先引进一些逻辑符号。 一个 SAT 问题是指: 对于给定的 CNF 是否存在一组关于命题变元的真值指派使A为真. 显然,如A为真,则CNF的每个子句中必有一个命题变元为1(真)。2 遗传算法遗传算法类似于自然进化,通过作用于染色体上的基因寻找好的染色体来求解问题。与自然界相似,遗传算法...

遗传算法解决旅行商问题GA_TSP【代码】【图】

心血来潮把GA_TSP问题用C++封装起来搞了一遍,期间真是收益不小。主要是用STL中的vector和list,结构体赋值中遇到了一些难点,原谅我自己是一棵白菜。 选择方法:用种群前面最优的20%代替后面的20%进行淘汰(当然这个比例可以自己拟定,修改代码中得pm_即可)。变异方法:交换一个路径上随机产生的两个城市。交叉方法:三交换启发交叉(THGA)。 genticTsp.h 代码如下: 1#ifndef GENTIC_TSP_H_2#define GENTIC_TSP_H_3 #include <iost...

HD1083 二分图,匈牙利算法【代码】

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<stdio.h> #include<stdlib.h> usingnamespace std; #define N 500 int n1, n2, ans; int result[N]; bool state[N]; bool map[N][N];bool find(int x) {for (int i = 1; i <= n2; ++i){if (map[x][i] && !state[i]){state[i] = true;if (result[i] == 0 || find(result[i])){result[i] = x;returntrue;}}}returnfalse; } int hungary() {for (int i = 1; i <= n1; ++...

经典算法题每日演练——第二十三题 鸡尾酒排序【代码】【图】

这篇我们继续扯淡一下鸡尾酒排序,为了知道为啥取名为鸡尾酒,特意看了下百科,见框框的话,也只能勉强这么说了。 要是文艺点的话,可以说是搅拌排序,通俗易懂点的话,就叫“双向冒泡排序”,我想作为码农的话,不可能不知道冒泡排序,冒泡是一个单向的从小到大或者从大到小的交换排序,而鸡尾酒排序是双向的,从一端进行从小到大排序,从另一端进行从大到小排序。从图中可以看到,第一次正向比较,我们找到了最大值9. ...

关于算法的时间复杂度O(f(n))【代码】【图】

(一)算法时间复杂度定义: 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。其中f(n)是问题规模n的某个函数。 (二)分析一个算法的时间复杂度(推导大O阶):1.用常数1取代运行时间中...

(算法)Game【图】

题目:Jeff loves playing games, Gluttonous snake( an old game in NOKIA era ) is one of his favourites. However, after playing gluttonous snake so many times, he finally got bored with the original rules.In order to bring new challenge to this old game, Jeff introduced new rules :1.The ground is a grid, with n rows and m columns(1 <= n, m <= 500).2.Each cell contains a value v (-1<=vi<=99999), if v...

协同过滤算法参考代码

代码有问题,运行出错,寻找解决办法,是不是数据集的错误呢? #include<iostream>#include<queue>#include<cmath>#include<cassert>#include<cstdlib>#include<fstream>#include<sstream>#include<vector>#include<algorithm>using namespace std;const int ITERM_SIZE=1682;const int USER_SIZE=943;const int V=15; //ITERM的最近邻居数const int S=10; //USER的最近邻居数struct MyPair{ int id; double v...

排序算法

排序算法——堆排序~大器晚成~ 2012-03-08 09:46 阅读:11393 评论:5 查找算法——找到序列中第二大的数(修正版)~大器晚成~ 2012-03-06 10:35 阅读:5687 评论:66 排序算法——快速排序~大器晚成~ 2012-02-29 10:13 阅读:114175 评论:51 排序算法——冒泡排序~大器晚成~ 2012-02-28 09:40 阅读:5394 评论:9 牛×的可视化排序~大器晚成~ 2012-02-24 17:10 阅读:1678 评论:3 排序算法——插入排序~大器晚成~ 2012-02-23 12:14 阅读:2222...

显示一周的算法【图】

需求就是这样,显示一周的日历。public class Test {public static void main(String[] args) {// TODO Auto-generated method stubString number[] = new String[7];Calendar calendar = Calendar.getInstance();Date date = new Date();SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");String currentDay = dateFormat.format(date);int currentDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);System.out.p...

使用分割思想实现快速排序算法【代码】

本文记录快速排序算法的一个精美实现,关于其中的一些优化或者思路请参考如下资料:快速排序中的分割算法的解析与应用http://www.cnblogs.com/hapjin/p/5518922.htmlhttp://blog.csdn.net/hapjin/article/details/49785477http://blog.csdn.net/hapjin/article/details/49201341 publicclass QuickSort{//分割数组,将数组分成两部分. 一部分比pivot(枢轴元素)大,另一部分比pivot小privatestaticint parition(int[] arr, int left, ...

算法:三个数之和【代码】

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为: [[-1, 0, 1],[-1, -1, 2] ]一开始看到这个题目,我并没有想太多,没有考虑复杂度神马的,就直接写了class Solution(object):def threeSum(self,nums):""":type nums: List[int]:r...

最短路算法(dijkstra,bellman_ford,floyd)【代码】【图】

最短路算法dijkstra(初级的最短路算法,适合稠密图,可用邻接表优化)bool relax(int u,int v) {double tmp=max(dist[u],edge[u][v]);if(tmp<dist[v]){dist[v]=tmp;} }void dijkstra() {memset(vis,0,sizeof(vis));for(int i=0;i<n;i++){int x;double mindist=INF;for(int j=0;j<n;j++){if(vis[j]) continue;if(dist[j]<mindist) mindist=dist[x=j];}vis[x]=1;for(int v=0;v<n;v++){if(v==x) continue;relax(x,v);}} }dijkstrabell...