算法思想
文章平均质量分 84
Xminyang
LifeVoyage
展开
-
4位超前进位加法器-Verilog HDL
Verilog HDL 简介Verilog HDL是目前设计界通常采用的一种硬件描述语言,被广泛的应用在数字ASIC和可编程逻辑器件的设计开发工作。其按照一定的规则和风格编写代码,可以从系统级、电路级、门级、开关级等抽象层次,进行数字电路系统的建模、设计和验证工作。4位超前进位加法器的编程实现使用ModelSim仿真软件进行相关的编程与仿真。//4位超前进位加法器对应的Verilog HDL代码原创 2016-10-19 12:11:43 · 19744 阅读 · 6 评论 -
Java:线程同步经典案例-生产者与消费者模型
一、相关知识简介 在生产者-消费者模型中,若只使用synchronized关键字实现对象锁,程序在运行中可能会出现以下两种情况:若生产者的速度大于消费者,那么在消费者来不及取前一个数据之前,生产者又产生了新的数据,于是消费者很可能会跳过前一个数据。若消费者的速度大于生产者,那么消费者可能多次取同一个数据。为了避免上述情况,必须使生产者向object对象中存储数据与消费者从o原创 2016-11-18 15:58:44 · 2759 阅读 · 0 评论 -
Longest Substring Without Repeating Characters (FROM LeetCode)
Longest Substring Without Repeating Characters 描述: Given a string, find the length of the longest substring without repeating characters. 样例: Given “abcabcbb”, the answer is “abc”, wh...原创 2018-05-16 17:01:04 · 191 阅读 · 0 评论 -
贪心算法理论分析和完整可复现代码示例,深入浅出,快速入门
一、理论知识 贪心算法是一种在每一步选择中都采取在当前状态下最好或者最优的选择,从而希望得到最好或者最优结果的算法。它对一些问题都能产生整体最优解,但并不能保证总是有效,只能说其解必然是最优解的很好的近似值。贪心选择性质 是指所求问题的整体最优解可以通过一系列局部最优的选择来获得。对每个问题,要确定其是否具有贪心选择性质,必须证明每一步所做的贪心选择最终会导致问题的整体最优解。最优子结构性质原创 2016-10-09 12:51:40 · 646 阅读 · 0 评论 -
求解最大值与最小值-分治算法
概述无论是最好、最坏或者平均情况,该MaxMin分治算法所用的比较次数都是3n/2-2。而实际中,任何一种以元素比较为基础的找最大值最小值元素的算法,其元素比较次数的下界为3n/2-2。因此,从此种情况上分析,该算法是最优的。但由于需要log(n)+1级的递归,而每次递归调用需要将 i j fmax fmin 和返回地址的值进行压栈,故需要额外占用一些内存空间。当然,压出栈过程中也会带来时间开销。原创 2016-11-28 11:31:15 · 22315 阅读 · 4 评论 -
for(初始化;条件判断;操作)
参数简介初始表达式:循环前的初始化变量,通常为赋值表达式:建议用var赋值,可以加快运行速度。(往往是i=1;或k=1;)条件表达式:每次循环前要计算的条件,是运算符类别中的条件运算符,返回值为true或false,当返回值为true时执行循环,为false时退出循环。(往往是i>=n;或用逻辑运算符)操作:每循环一次以后要计算的表达式,通常是递增++或递减—等赋值表达式。for语句中的三个参原创 2016-11-23 20:55:47 · 6229 阅读 · 0 评论 -
[可直接运行] 线性同余发生器-随机数,C语言实现
简介随机数在概率算法设计中是必须的。在计算机上无法产生真正的随机数,一般使用伪随机数发生器产生的伪随机数。伪随机数发生器是一个算法,产生的数列元素之间近似相互独立,多数力图产生的样本同分布。常用的伪随机数发生器:线性同余发生器、滞后 Fibonacci 发生器、线性反馈移位发生器、广义反馈移位发生器等。线性同余发生器:线性同余法产生的随机序列a1,a2,……,an,满足 1、a0=d; 2...原创 2016-11-23 11:49:23 · 9040 阅读 · 4 评论 -
快速排序-分治算法
基本思想:将数组A[1...n]划分为两个子数组A[1...p]和A[p+1...n],使得前子数组中的元素均不大于后子数组中的元素,然后分别对这两个数组进行排序,最后再合并为一个有序数组。复杂度分析 // quick_sort.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <algorithm>using namespace std;原创 2016-11-30 00:25:30 · 932 阅读 · 0 评论 -
归并排序-分治算法
基本思想:采用分治算法,将要排序的数组分为两个部分,先分别对这两个部分进行排序,然后再将两部分已经排好序的子数组进行合并,最后形成一个有序的数组。时间复杂度为: // mergeSort.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#define N 6int A[N] = {9,4,1,6,8,7};/* 数组A[low...mid]和A[mi原创 2016-11-29 22:44:03 · 760 阅读 · 0 评论 -
插入排序原理与实现
已知n个元素的数组A[1...n],使用插入法将A中元素按非减排序。// insert_sort.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"/* 向数组a[1...n]中插入元素x*/void Insert(int a[], int n, int x){ int i=n; while (x < a[i]) {原创 2016-11-29 21:36:29 · 422 阅读 · 0 评论 -
回溯算法-定和子集问题
问题描述:在一给定集合中,选择出其子集,使得该子集的元素之和等于给定的数。选择的子集个数不一定唯一。 数学模型: 数的集合S={w1,w2,…,wn}; 定数:M; 求解向量: x=(x1,x2,…,xn),xi为0或1, 使得wi*xi==M. 约束条件: 1、假定前k-1项选择已经确定,并且第k项已选择,使得wi*xi<=M; (i从1至k) 2、确定是否需要继续向前搜索原创 2016-10-28 16:44:16 · 3669 阅读 · 0 评论 -
回溯算法
基本思想 - 可行解:解空间中满足约束条件的决策序列。 - 最优解:在约束条件下使目标值达到最大或者最小的可行解。 - 常用的两种剪枝函数:约束函数(在扩展节点处剪去不满足约束条件的子树)、限界函数(剪去不能达到最优解的子树)。 基本思想是:从状态空间的一条路往前走,能进则进,不能进(界限函数)则退回来,换一条路再试。 状态空间树是由根到所有其他节点的路径描述了某原创 2016-10-28 15:43:00 · 705 阅读 · 0 评论 -
贪心算法-背包问题2
对上次的C语言代码做了一些修改,可以打印出装进背包里面的物品的顺序编号。// 贪心算法-背包问题-解向量.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <algorithm>using namespace std;#define N 3int flag = 0;//装进物品的总数标记typedef struct{ int w;原创 2016-10-10 21:48:04 · 516 阅读 · 0 评论 -
贪心算法-背包问题
一、背包问题**已知容量为M的背包和n件物品。第i件物品的重量为wi,价值是pi,且将物品i的一部分xi放进背包即可以获得pi*xi的价值。那么,怎么装包才能获得最大价值?**若采用贪心算法,有如下几种方案可选:1、每次选择最轻的物品;2、每次选择最大价值的物品;3、每次选择性价比最大的物品,即pi/wi最大。方案1只考虑多装物品,但由于性价比不一定高,故总价值可能不是最大;方案2忽略了物品的重原创 2016-10-10 11:29:19 · 1671 阅读 · 0 评论