关于基本算法思想这一篇就够了

递推算法基本思想

递推算法是通过已知条件,利用特定关系得出中间结论,直至得到最后结果的算法。递推算法按照一定的规律来计算序列中的每一项,通常是通过计算机器前一项(或前几项)的值来推出当前项的值。

示例(斐波那契数列)

public class Fibonacci {
public static int fibonacci(int n) {
if (n <= 1) {
return n;
}
int a = 0, b = 1, c;
for (int i = 2; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
return b;
}
public static void main(String[] args) {
System.out.println(fibonacci(10)); // 输出第10项斐波那契数列的值
}
}

递归算法思想

递归算法是一种直接或间接地调用自身的算法。它将问题分解为更小的子问题,然后递归地求解子问题,最后将子问题的解组合起来,形成原问题的解。

示例(阶乘函数)

public class Factorial {
public static int factorial(int n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1); // 递归调用自身
}
public static void main(String[] args) {
System.out.println(factorial(5)); // 输出5的阶乘值
}
}

分治算法思想

分治算法是将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。递归地解决这些子问题,然后将子问题的解合并起来,形成原问题的解。

示例(归并排序)

 
public class MergeSort {
public static void mergeSort(int[] arr, int left, int right) {
if (left < right) {
int mid = (left + right) / 2;
mergeSort(arr, left, mid); // 递归解决左半部分
mergeSort(arr, mid + 1, right); // 递归解决右半部分
merge(arr, left, mid, right); // 合并左右两部分
}
}
// 合并两个有序数组
private static void merge(int[] arr, int left, int mid, int right) {
int[] temp = new int[right - left + 1];
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
if (arr[i] <= arr[j]) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
while (i <= mid) {
temp[k++] = arr[i++];
}
while (j <= right) {
temp[k++] = arr[j++];
}
// 将temp中的元素复制回arr中
for (i = left, k = 0; i <= right; i++, k++) {
arr[i] = temp[k];
}
}
public static void main(String[] args) {
int[] arr = {38, 27, 43, 3, 9, 82, 10};
mergeSort(arr, 0, arr.length - 1);
for (int i : arr) {
System.out.print(i + " ");
}
}
}

概率算法思想

概率算法是基于一定的概率性结论来求解问题的算法。这种算法并不总是给出确定的答案,而是给出一个答案的概率或期望。

示例(模拟随机漫步)

import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class RandomWalk {
// 模拟随机漫步的函数
public static Map<Integer, Integer> simulateRandomWalk(int steps, double rightStepProbability) {
Random rand = new Random();
int position = 0;
Map<Integer, Integer> positionCounts = new HashMap<>(); // 存储位置出现的次数
// 初始化位置计数为0
for (int i = -steps; i <= steps; i++) {
positionCounts.put(i, 0);
}
for (int i = 0; i < steps; i++) {
if (rand.nextDouble() < rightStepProbability) {
position++; // 朝右走一步
} else {
position--; // 朝左走一步
}
// 更新位置计数
positionCounts.put(position, positionCounts.getOrDefault(position, 0) + 1);
}
return positionCounts;
}
// 主函数,模拟并输出结果
public static void main(String[] args) {
int steps = 1000; // 设定步数
double rightStepProbability = 0.5; // 设定向右走的概率
Map<Integer, Integer> positionCounts = simulateRandomWalk(steps, rightStepProbability);
// 输出结果
for (Map.Entry<Integer, Integer> entry : positionCounts.entrySet()) {
System.out.println("Position " + entry.getKey() + " occurred " + entry.getValue() + " times.");
}
}
}

在这个示例中,simulateRandomWalk 函数模拟了随机漫步过程,并统计了每个位置出现的次数。主函数 main 设定了步数和向右走的概率,并调用了 simulateRandomWalk 函数进行模拟,最后输出了每个位置出现的次数。由于随机性,每次运行程序得到的结果都会有所不同。这个示例展示了概率算法的一个基本思想:通过模拟大量随机事件来估计某个事件发生的概率或期望。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/832469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux-信号概念

1. 什么是信号 信号本质是一种通知机制&#xff0c;用户or操作系统通过发送信号通知进程&#xff0c;进程进行后续处理 在日常生活中就有很多例子&#xff0c;比如打游戏方面王者荣耀的“进攻”&#xff0c;“撤退”&#xff0c;“请求集合”&#xff0c;“干得漂亮&#xff01…

【数据结构】有关环形链表题目的总结

文章目录 引入 - 快慢指针思考 - 快慢指针行走步数进阶 - 寻找环形链表的头 引入 - 快慢指针 141-环形链表 - Leetcode 关于这道题&#xff0c;大家可以利用快慢指针&#xff0c;一个每次走两步&#xff0c;一个每次走一步&#xff0c;只要他们有一次相撞了就代表说这是一个链…

ue引擎游戏开发笔记(33)——武器与角色的匹配,将新武器装备到角色身上

1.需求分析&#xff1a; 武器能出现在世界中&#xff0c;完成了第一步&#xff0c;下一步需要角色和武器适配&#xff0c;即不论角色跑动&#xff0c;射击等&#xff0c;武器和角色都相匹配&#xff0c;将武器装备到角色身上。 2.操作实现&#xff1a; 1.首先先把角色原有的武…

如何保证Redis双写一致性?

目录 数据不一致问题 数据库和缓存不一致解决方案 1. 先更新缓存&#xff0c;再更新数据 该方案数据不一致的原因 2. 先更新数据库&#xff0c;再更新缓存 3. 先删除缓存&#xff0c;再更新数据库 延时双删 4. 先更新数据库&#xff0c;再删除缓存 该方案数据不一致的…

LeetCode 226.翻转二叉树(全网最多的解法)

LeetCode 226.翻转二叉树 1、题目 题目链接&#xff1a;226. 翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#…

股票一级市场和二级市场什么意思

股票一级市场和二级市场是股票市场的两个重要组成部分&#xff0c;它们的主要区别在于交易的性质和市场角色。 一级市场&#xff08;Primary Market&#xff09;&#xff0c;也称为发行市场&#xff08;Issuance Market&#xff09;&#xff0c;是指公司直接或通过中介机构向…

Sentinel流量防卫兵

1、分布式服务遇到的问题 服务可用性问题 服务可用性场景 服务雪崩效应 因服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐放大的过程&#xff0c;就叫服务雪崩效应导致服务不可用的原因&#xff1a; 在服务提供者不可用的时候&#xff0c;会出现大量重试的情况&…

Terraform模块元参数

在Terraform 0.13之前&#xff0c;模块在使用上存在一些限制。 例如通过模块来创建EC2主机&#xff0c;可以这样&#xff1a; module "ec2_instance" {source "terraform-aws-modules/ec2-instance/aws"version "~> 3.0"name "sing…

vue中的store

1.什么是store 在 Vue.js 应用中&#xff0c;"store" 通常指的是 Vuex。Vuex 是一个专门为 Vue.js 应用开发的状态管理库&#xff0c;它能够帮助你在应用中更好地管理和共享状态。以下是 Vuex 的一些简单介绍&#xff1a; 状态管理&#xff1a;Vuex 允许你将应用中的…

Flink时间语义 | 大数据技术

⭐简单说两句⭐ ✨ 正在努力的小叮当~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &a…

爬虫学习(2)破解百度翻译

代码 import requests import jsonif __name__ "__main__":url https://fanyi.baidu.com/sug#post请求参数处理&#xff08;同get请求一致&#xff09;headers {"User-Agent": Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, …

基于Springboot的果蔬作物疾病防治系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的果蔬作物疾病防治系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系…

ICode国际青少年编程竞赛- Python-1级训练场-识别循环规律1

ICode国际青少年编程竞赛- Python-1级训练场-识别循环规律1 1、 for i in range(4):Dev.step(6)Dev.turnLeft()2、 for i in range(3):Dev.turnLeft()Dev.step(2)Dev.turnRight()Dev.step(2)3、 for i in range(3):Spaceship.step(5)Spaceship.turnLeft()Spaceship.step(…

spi 驱动总结

0. 源码 结构 drivers/spi/spi.c 对应spi 核心 drivers/spi/spidev.c 对应spi 设备驱动 drivers/spi/spi-bcm2835.c 对应spi 控制器驱动 1. 数据发送: ctrl->transfer_one 的实现 2. 注册子设备 int spi_register_controller(struct spi_controller *ctlr) 注册spi 控…

算法训练营day31

一、贪心算法理论基础 在问题的每个决策阶段&#xff0c;都选择当前看起来最优的选择&#xff0c;即贪心地做出局部最优的决策&#xff0c;以期获得全局最优解。 最好用的策略就是举反例&#xff0c;如果想不到反例&#xff0c;那么就试一试贪心吧。 动态规划和贪心的区别 …

TypeScipt 联合类型 | 号的使用

联合类型有两种使用方法&#xff1a; 一种类型中多个可能的值。具有多种不同的类型中的一种。 一种类型中多个可能的值。 type isAye true | false;const aye:isAye true; const aye1:isAye false; const aye2:isAye 3; // Type number is not assignable to type isAye…

编译原理的基本概念、发展历程、主要内容和实际应用

**编译原理** 一、引言 编译原理是计算机专业的一门核心课程&#xff0c;旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分&#xff0c;也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和…

Linux字符设备驱动(一) - 框架

字符设备是Linux三大设备之一(另外两种是块设备&#xff0c;网络设备)&#xff0c;字符设备就是字节流形式通讯的I/O设备,绝大部分设备都是字符设备&#xff0c;常见的字符设备包括鼠标、键盘、显示器、串口等等&#xff0c;当我们执行ls -l /dev的时候&#xff0c;就能看到大量…

2024年5月6日优雅草蜻蜓API大数据服务中心v2.0.3更新

v2.0.3更新 2024年5月6日优雅草蜻蜓API大数据服务中心v2.0.3更新-修复改版后搜索框漏掉的bug-增加搜索框 提示&#xff1a;优雅草大数据中心已经 上线137天 稳定运行 1181555 次 累积调用 目前大数据中心用户呈现增长趋势&#xff0c;目标2024年11月底突破1亿次调用&#xf…

021、Python+fastapi,第一个Python项目走向第21步:ubuntu 24.04 docker 安装mysql8集群、redis集群(二)

系列文章目录 pythonvue3fastapiai 学习_浪淘沙jkp的博客-CSDN博客https://blog.csdn.net/jiangkp/category_12623996.html 前言 安装redis 我会以三种方式安装&#xff0c;在5月4号修改完成 第一、直接最简单安装&#xff0c;适用于测试环境玩玩 第二、conf配置安装 第三…