算法概述

简介: 本文源代码地址:click here,欢迎star和fork~~~共同学习~~~~参考资料目录目录枚举百钱百鸡问题熄灯问题讨厌的青蛙问题递归 注意不要盲目相信以下内容! 不要盲目相信以下内容! 不要盲目相信以下内容! (重要的事情说三遍),虽然以下内容也经过了我的验证,但是我的验证可能有错误的地方,欢迎大家留言告知。

本文源代码地址click here,欢迎star和fork~~~共同学习~~~~参考资料

目录


注意不要盲目相信以下内容! 不要盲目相信以下内容! 不要盲目相信以下内容! (重要的事情说三遍),虽然以下内容也经过了我的验证,但是我的验证可能有错误的地方,欢迎大家留言告知。希望这篇文章成为你深入探索相关领域的引子启发,而不是标准答案


枚举

枚举虽然是我们日常生活中最常用的方法,但实际上这种方法要用的好还是有一定困难。

百钱百鸡问题

问题描述:
共有一百文钱,要求买到100只鸡。其中公鸡5文一只,母鸡3文一只,小鸡1文3只。

关键伪代码如下:

int z = 0;
    for (int x = 0; x < 100;x++)
        for (int y = 0; y < 100-x; y++)
        {
            z = 100 - x - y;
            if (z % 3 == 0)
            {
                if (z/3 + 3 * y + 5 * x == 100)
                {
                    x,y,z is the solution;
                }
            }

        }
        //只需要简单的进行两层循环即可

熄灯问题

问题描述:5*6的灯泡和按键组成的矩阵,按下按键可以改变自己以及周围四邻域的灯泡的状态(4个角上的按钮改变3盏灯,边上的按钮改变4盏灯,其他按钮改变5盏灯状态)。此时给定一个初始状态,求一个按钮矩阵,使得按下相应按钮可以使所有灯泡熄灭。
这里写图片描述
在下图中, 左边矩阵中用X标记的按钮表示被按下,
右边的矩阵表示灯状态的改变
这里写图片描述

输入:
• 第一行是一个正整数N, 表示需要解决的案例数
• 每个案例由5行组成, 每一行包括6个数字
• 这些数字以空格隔开, 可以是0或1
• 0 表示灯的初始状态是熄灭的
• 1 表示灯的初始状态是点亮的
输出:
• 对每个案例, 首先输出一行, 输出字符串 “PUZZLE #m”, 其中m是该案例的序号
• 接着按照该案例的输入格式输出5行
• 1 表示需要把对应的按钮按下
• 0 表示不需要按对应的按钮
• 每个数字以一个空格隔开
这里写图片描述
解题思路:

int main(){}

讨厌的青蛙问题

递归

求解:给定一个数组a[N],我们希望构造数组b[N],其中b[i]=a[0]a1…*a[N-1]/a[i]。 下面是完整题目

给定一个数组a[N],我们希望构造数组b[N],其中b[i]=a[0]a1…*a[N-1]/a[i]。在构造过程:
不允许使用除法;
要求O(1)空间复杂度和O(n)时间复杂度;
除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量、对空间和全局静态变量等);
请用程序实现并简单描述。

可以在b数组的基础上做两次遍历,先存前缀,再存后缀

int main(){
const int n = 8;
int a[n] = {1,2,3,4,5,6,7,8};
int b[n];
b[n-1] = 1;
for (int i=n-2;i>=0;i–)
b[i] = b[i+1]*a[i+1];

for(int i=1;i<n-1;i++)
{
    b[n-1]*=a[i-1];
    b[i] *= b[n-1];
}
b[n-1]*=a[n-2];
for (int i=0;i<n;i++)
    cout << b[i] << endl;

}

设计一个算法,将数组A(0….n-1)中的元素循环右移k位,假设原数组序列为a0,a1,a2,…..,an-1;移动后的序列为an-k,an-k+1,…,a0,a1,…,an-k-1.
空间复杂度O(1),时间复杂度O(n)

解法:假设原数组序列为abcd1234,右移4位变成1234abcd,可把两段看成两个整体。
右移K位的过程就是把数组的两部分交换一下。
变换过程通过以下步骤完成:
1.逆序排列 abcd: abcd1234 -> dcba1234;
2.逆序排列 1234: dcba1234-> dcba4321;
3.全部逆序 dcba4321->1234abcd。


目录
相关文章
|
6月前
|
算法
|
算法 机器人 定位技术
第10章 经典智能算法——10.3 蚁群算法概述(2)
第10章 经典智能算法——10.3 蚁群算法概述(2)
|
1月前
|
机器学习/深度学习 算法 API
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
|
3月前
|
人工智能 自然语言处理 算法
【人工智能】TF-IDF算法概述
TF-IDF算法,全称Term Frequency-Inverse Document Frequency(词频-逆文档频率),是一种在信息检索和文本挖掘领域广泛应用的加权技术。它通过评估一个词语在文档中的重要程度,来挖掘文章中的关键词,进而用于文本分析、搜索引擎优化等场景。其核心思想是:如果某个词或短语在一篇文章中出现的频率高(TF高),且在其他文章中很少出现(IDF也高),则认为这个词或短语具有很好的类别区分能力,适合用来代表这篇文章的内容。 具体而言,TF-IDF由两部分组成,即词频(TF)和逆文档频率(IDF)。词频(TF)指的是某一个给定的词在该文件中出现的频率。这个数值通常会被归一化
55 3
|
3月前
|
机器学习/深度学习 人工智能 算法
【人工智能】传统语音识别算法概述,应用场景,项目实践及案例分析,附带代码示例
传统语音识别算法是将语音信号转化为文本形式的技术,它主要基于模式识别理论和数学统计学方法。以下是传统语音识别算法的基本概述
81 2
|
4月前
|
机器学习/深度学习 人工智能 算法
计算机算法基础概述与常用算法解析
计算机算法基础概述与常用算法解析
|
5月前
|
机器学习/深度学习 人工智能 算法
计算机算法基础概述与常用算法解析
计算机算法基础概述与常用算法解析
|
5月前
|
存储 算法 安全
加密算法概述:分类与常见算法
加密算法概述:分类与常见算法
|
5月前
|
负载均衡 算法 调度
负载均衡算法概述
负载均衡算法概述
|
5月前
|
算法
计算机算法设计与分析 第1章 算法概述 (笔记)
计算机算法设计与分析 第1章 算法概述 (笔记)
下一篇
无影云桌面