算法复习
00110001
这个作者很懒,什么都没留下…
展开
-
二分查找算法及其改写(C++实现)
二分查找算法及其改写(C++实现)二分查找算法是利用分治策略的典型例子。设a[0:n-1]是已排好序的数组,在这n个元素中找出一特定元素x。基本思想是将n个元素分成个数大致相同的两半,取a[n/2]与x进行比较,如果x=a[n/2],则找到x,算法终止,如果x<a[n/2],则在左半边继续搜索。代码如下:int binarySearch(int a[],int x,int n){...原创 2019-12-20 09:12:41 · 1750 阅读 · 0 评论 -
分治法解决硬币问题(二分法/三分法)(C++实现)
在n(n≥3)枚硬币中混有一枚不合格硬币(重量过轻或过重未知),如果只有一架天平可以用来称重且称重硬币数量没有限制,设计一个算法找出这枚不合格硬币,使得称重次数最少。二分法:将这n个硬币分成两等份,然后放到天平的两端,则假币在较轻的那一端;然后将较轻的那一端的硬币再分成2等份,然后再放到天平的两端进行比较,假币还是在较轻的那一段;直到最后只剩下两个硬币了,分别放到天平的两端,轻的哪一个就是...原创 2019-12-20 09:12:26 · 4503 阅读 · 6 评论 -
单峰问题分治法算法(C++实现)
给定含有n个不同的数组成的数组L=<x1,x2,x3,…,xn>,如果L中存在xi使得,则称x1<x2 <…<xi-1<xi且xi>xi+1>…>xn则称L是单峰的,并称xi是L的峰顶。假设L是单峰的,设计算法找到L的峰顶。将n个元素的数组分为差不多大的两个n/2的数组;根据分界线,直接淘汰掉一半,缩小范原创 2019-12-20 09:12:53 · 695 阅读 · 0 评论 -
合并排序递归算法/逆序问题/众数问题(C++)
用递归的合并排序对如下数据进行排序(45, 23, 65, 57, 38, 2, 96, 87, 14, 70 )合并排序算法是用分治策略实现对n个元素进行排序的算法;基本思想:将待排序数组分为成分大小大致相同的2个子集和;分别对两个子集和进行排序;合并两个排序后的子集和。代码实现:(时间复杂度:O(nlongn))#include<iostream>using nam...原创 2019-12-20 09:13:21 · 308 阅读 · 0 评论 -
矩阵连乘(C++实现)
懒了,只放代码#include <iostream> using namespace std;#define MAX 50int p[MAX+1]; //存储各个矩阵的列数以及第一个矩阵的行数(作为第0个矩阵的列数) int m[MAX][MAX]; //m[i][j]存储子问题的最优解 int s[MAX][MAX]; ...原创 2019-12-20 09:13:28 · 1275 阅读 · 0 评论 -
最长不降子序列(C++实现)
给定有 n 个整数组成的数列An={a1、a2、……、an}。An的一个长度为m的不降子序列 Bm,即Bm 包含于An且满足对任意1≤i<j≤m有Bi≤Bj。例如 An = {3,18,7,14,10,12,23,41,16,24},则{3,18,23,24} 就是一个长度为 4 的不下降序列,同时也有{ 3,7,10,12,16,24 }长度为 6 的不下降序列。请设计算法,求所有 An的不降子...原创 2019-12-20 09:11:17 · 703 阅读 · 0 评论