算法专题:记忆搜索
参考练习习题总集
文章目录
- 前置知识
- 练习习题
- 87. 扰乱字符串
- 97. 交错字符串
- 375. 猜数字大小II
- 403. 青蛙过河
- 464. 我能赢吗
- 494. 目标和
- 552. 学生出勤记录II
- 576. 出借的路径数
前置知识
没有什么特别知识,只有一些做题经验。要做这类型的题目,首先写出暴力搜索,然后写出记忆搜索,大概就是这个流程。感觉说了一些废话。
练习习题
87. 扰乱字符串
TLE:(自己写的难蚌代码)
class Solution {
public:unordered_set<string> jh;bool isScramble(string s1, string s2) {func(s1,0,s1.size()-1);return jh.find(s2)!=jh.end();}void func(string s,int l,int r){if (l==r) {jh.insert(s);return;}for (int i=l;i<r;i++){func(s,l,i);func(s,i+1,r);string temp=s.substr(0,l)+s.substr(i+1,r-i)+s.substr(l,i-l+1)+s.substr(r+1,s.size()-1-r);func(temp,l,l+r-i-1);func(temp,r-i+l,r);}}
};
TLE:(一个较合适的思路)
class Solution {
public:bool isScramble(string s1, string s2) {if (s1==s2) return true;if (check(s1,s2)) return false;for (int i=1;i<s1.size();i++){string a=s1.substr(0,i),b=s1.substr(i);string c=s2.substr(0,i),d=s2.substr(i);if (isScramble(a,c) and isScramble(b,d)) return true;string e=s2.substr(0,s1.size()-i),f=s2.substr(s1.size()-i);if (isScramble(a,f) and isScramble(b,e)) return true;}return false;}bool check(const string & s1,const string & s2){int lb[26] {};for (int i=0;i<s1.size();i++)lb[s1[i]-'a']+=1;for (int i=0;i<s2.size();i++)lb[s2[i]-'a']-=1;for (int i=0;i<26;i++)if (lb[i]!=0) return true;return false;}
};
AC:(刚上手就放弃的屑)
temp[i][j][k]:从s1[i]开始k个字符,从s2[j]开始k个字符,是否互为扰乱串呢。(包括下标本身字符)。if (temp[i][j][len]!=0) return temp[i][j][len]==1;
是关键这句删除就是上面那种解法。
class Solution {
public:vector<vector<vector<int>>> temp;string string1,string2;int n;bool isScramble(string s1,string s2) {if (s1.size()!=s2.size()) return false;string1=s1;string2=s2;n=s1.size();temp.resize(n,vector<vector<int>> (n,vector<int> (n+1,0)));return dfs(0,0,n);}bool dfs(int i,int j,int len){if (temp[i][j][len]!=0) return temp[i][j][len]==1;string a=string1.substr(i,len),b=string2.substr(j,len);if (a==b){temp[i][j][len]=1;return true;}if (check(a,b)){temp[i][j][len]=-1;return false;}for (int k=1;k<len;k++) {if (dfs(i,j,k) and dfs(i+k,j+k,len-k)){temp[i][j][len]=1;return true;}if (dfs(i,j+len-k,k) and dfs(i+k,j,len-k)){temp[i][j][len]=1;return true;}}temp[i][j][len]=-1;return false;}bool check(const string & s1,const string & s2){int lb[26] {};for (int i=0;i<s1.size();i++)lb[s1[i]-'a']+=1;for (int i=0;i<s2.size();i++)lb[s2[i]-'a']-=1;for (int i=0;i<26;i++)if (lb[i]!=0) return true;return false;}
};
97. 交错字符串
MLE:(第一反应还是暴搜)
class Solution {
public:string string1,string2;unordered_set<string> jh;bool isInterleave(string s1, string s2, string s3) {if (s1.size()+s2.size()!=s3.size()) return false;string1=s1;string2=s2;string string3;func(0,0,string3);return jh.find(s3)!=jh.end();}void func(int l1,int l2,string s){if (l1<string1.size())func(l1+1,l2,s+string1[l1]);if (l2<string2.size())func(l1,l2+1,s+string2[l2]);if (l1==string1.size() and l2==string2.size())jh.insert(s);}
};
TLE:(优化一下,怎么还是没有过啊,我要疯了)
class Solution {
public:string string1,string2,string3;unordered_set<string> jh;bool isInterleave(string s1, string s2, string s3) {if (s1.size()+s2.size()!=s3.size()) return false;string1=s1;string2=s2;string3=s3;string string4;func(0,0,string4);return jh.find(s3)!=jh.end();}void func(int l1,int l2,string s){if (l1<string1.size() and string1[l1]==string3[s.size()])func(l1+1,l2,s+string1[l1]);if (l2<string2.size() and string2[l2]==string3[s.size()])func(l1,l2+1,s+string2[l2]);if (l1==string1.size() and l2==string2.size())jh.insert(s);}
};
TLE:(继续优化,真是过不了一点啊,最后一点真是可恶,受不了了)
class Solution {
public:string string1,string2,string3;bool flag=false;bool isInterleave(string s1, string s2, string s3) {if (s1.size()+s2.size()!=s3.size()) return false;string1=s1;string2=s2;string3=s3;func(0,0);return flag;}void func(int l1,int l2){if (!flag){if (l1<string1.size() and string1[l1]==string3[l1+l2])func(l1+1,l2);if (l2<string2.size() and string2[l2]==string3[l1+l2])func(l1,l2+1);if (l1==string1.size() and l2==string2.size())flag=true;}}
};
AC:(嗨嗨嗨导这么久了终于给我导出来了)
temp[i][j]:从s1[i]开始剩余字符,从s2[j]开始剩余字符,能否组成剩余部分。(包括下标本身字符)
class Solution {
public:string string1,string2,string3;vector<vector<int>> temp;bool isInterleave(string s1, string s2, string s3) {if (s1.size()+s2.size()!=s3.size()) return false;string1=s1;string2=s2;string3=s3;temp.resize(s1.size()+1,vector<int> (s2.size()+1,0));return func(0,0);}bool func(int l1,int l2){if (l1==string1.size() and l2==string2.size()) return true;if (temp[l1][l2]!=0) return temp[l1][l2]==1;bool result=false;if (l1<string1.size() and string1[l1]==string3[l1+l2])result|=func(l1+1,l2);if (l2<string2.size() and string2[l2]==string3[l1+l2])result|=func(l1,l2+1);temp[l1][l2]=result?1:-1;return result;}
};
375. 猜数字大小II
AC:(题都没有读懂的屑)
temp[l][r]:区间(l,r)的最小花费。
class Solution {
public:vector<vector<int>> temp;int getMoneyAmount(int n) {temp.resize(n+5,vector<int> (n+5,0));return dfs(1,n);}int dfs(int l,int r){if (l>=r) return 0;if (temp[l][r]!=0) return temp[l][r];int result=INT_MAX;for (int i=l;i<=r;i++){int result_temp=max(dfs(l,i-1),dfs(i+1,r))+i;result=min(result,result_temp);}temp[l][r]=result;return result;}
};
403. 青蛙过河
AC:(不看题解也能做啦)
cache[now][next]:从第0个石头开始,走now石头到next石头,是否能够到达终点。
class Solution {
public:vector<int> lb;vector<vector<int>> cache;bool canCross(vector<int>& stones) {if (stones[1]!=1) return false;lb=stones;cache.resize(stones.size(),vector<int> (stones.size(),0));return dfs(0,1);}bool dfs(int now,int next){if (next==lb.size()-1) return true;if (cache[now][next]!=0) return cache[now][next]==1;vector<int> temp;int steps=lb[next]-lb[now];for (int i=next+1;i<lb.size();i++){if (lb[i]==lb[next]+steps-1) temp.push_back(i);if (lb[i]==lb[next]+steps) temp.push_back(i);if (lb[i]==lb[next]+steps+1) temp.push_back(i);if (lb[i]>=lb[next]+steps+2) break;}for (int i=0;i<temp.size();i++)if (dfs(next,temp[i])){cache[next][temp[i]]=1;return true;}else cache[next][temp[i]]=-1;return false;}
};
464. 我能赢吗
超标超标还是超标。
这里共有三个关键:
首先就是思路问题,我有一个错的思路:不论我去选择什么,最终结果我都能赢。这种想法不正确的(例如:输入样例4、6。只要先手去选择1,后手无论怎么选择,先手全部情况能赢。但是按照错误思路,先手如果去选择4,那么先手必然会输。)。也就是说选手只会选择成功最佳方案。
WA:
class Solution {
public:int num1,num2;unordered_set<int> jh;bool canIWin(int maxChoosableInteger, int desiredTotal) {if ((1+maxChoosableInteger)*maxChoosableInteger/2<desiredTotal) return false;num1=maxChoosableInteger;num2=desiredTotal;for (int i=1;i<=maxChoosableInteger;i++) jh.insert(i);return dfs(0,0);}bool dfs(int times,int scores){int iter=0,length=jh.size();int * lb=new int [length];for (auto zz=jh.begin();zz!=jh.end();zz++){lb[iter]=*zz;iter+=1;}for (int i=0;i<length;i++){if (scores+lb[i]>=num2){if (times%2==0) continue;delete [] lb;return false;}jh.erase(lb[i]);if (!dfs(times+1,scores+lb[i])) {delete [] lb;return false;}jh.insert(lb[i]);}delete [] lb;return true;}
};
所以正确思路应是:我的对手十分强大,我选择数必须保证,对手必须全部输掉,否则那么不选这数,继续进行下次循环,循环结束如没找到,那么我就不能够赢。
TLE:
class Solution {
public:int num1,num2;unordered_set<int> jh;bool canIWin(int maxChoosableInteger, int desiredTotal) {if ((1+maxChoosableInteger)*maxChoosableInteger/2<desiredTotal) return false;num1=maxChoosableInteger;num2=desiredTotal;for (int i=1;i<=maxChoosableInteger;i++) jh.insert(i);return dfs(0,0);}bool dfs(int times,int scores){int iter=0,length=jh.size();int * lb=new int [length];for (auto zz=jh.begin();zz!=jh.end();zz++){lb[iter]=*zz;iter+=1;}for (int i=0;i<length;i++){jh.erase(lb[i]);if (scores+lb[i]>=num2) {jh.insert(lb[i]);delete [] lb;return true;}if (!dfs(times+1,scores+lb[i])) {jh.insert(lb[i]);delete [] lb;return true;}jh.insert(lb[i]);}delete [] lb;return false;}
};
暴力我们写出来了,我们该写记忆搜索。但是我们发现由于使用集合并不好写,所以第二关键就是,必须换种存储方式。
TLE:
class Solution {
public:int num1,num2,x=1;bool canIWin(int maxChoosableInteger, int desiredTotal) {if ((1+maxChoosableInteger)*maxChoosableInteger/2<desiredTotal) return false;num1=maxChoosableInteger;num2=desiredTotal;x=(x<<maxChoosableInteger)-1;return dfs(0,0);}bool dfs(int times,int scores){for (int i=1;i<=num1;i++){if (((1<<(i-1))&x)==0) continue;x-=(1<<(i-1));if (scores+i>=num2) {x+=(1<<(i-1));return true;}if (!dfs(times+1,scores+i)) {x+=(1<<(i-1));return true;}x+=(1<<(i-1));}return false;}
};
第三关键记忆搜索
AC:
class Solution {
public:int num1,num2,x=1;vector<int> lb;bool canIWin(int maxChoosableInteger, int desiredTotal) {if ((1+maxChoosableInteger)*maxChoosableInteger/2<desiredTotal) return false;num1=maxChoosableInteger;num2=desiredTotal;x=(x<<maxChoosableInteger)-1;lb.resize(1<<maxChoosableInteger,0);return dfs(0,0);}bool dfs(int times,int scores){if (lb[x]!=0) return lb[x]==1;for (int i=1;i<=num1;i++){if (((1<<(i-1))&x)==0) continue;x-=(1<<(i-1));if (scores+i>=num2) {x+=(1<<(i-1));lb[x]=1;return true;}if (!dfs(times+1,scores+i)) {x+=(1<<(i-1));lb[x]=1;return true;}x+=(1<<(i-1));}lb[x]=-1;return false;}
};
494. 目标和
直接暴力
AC:
class Solution {
public:int num,result=0;vector<int> lb;int findTargetSumWays(vector<int>& nums, int target) {num=target;lb=nums;dfs(0,0);return result;}void dfs(int begin,int count){if (begin==lb.size()){if (count==num) result+=1;return;}dfs(begin+1,count+lb[begin]);dfs(begin+1,count-lb[begin]);}
};
552. 学生出勤记录II
首先暴力
TLE:
class Solution {
public:int mod=1e9+7;int checkRecord(int n) {return dfs(n,0,0)%mod;}int dfs(int n,int A,int P){if (n==0) return 1;int count=0;if (A==0) count=(count+dfs(n-1,1,0))%mod;if (P<=1) count=(count+dfs(n-1,A,P+1))%mod;count=(count+dfs(n-1,A,0))%mod;return count;}
};
记忆搜索
AC:
class Solution {
public:vector<vector<vector<int>>> lb;int mod=1e9+7;int checkRecord(int n) {lb.resize(n,vector<vector<int>> (2,vector<int> (3,0)));return dfs(n,0,0)%mod;}int dfs(int n,int A,int P){if (n==0) return 1;if (lb[n-1][A][P]!=0) return lb[n-1][A][P];int count=0;if (A==0) count=(count+dfs(n-1,1,0))%mod;if (P<=1) count=(count+dfs(n-1,A,P+1))%mod;count=(count+dfs(n-1,A,0))%mod;lb[n-1][A][P]=count;return count;}
};
576. 出借的路径数
首先暴力
TLE:
class Solution {
public:int length,width,mod=1e9+7;int findPaths(int m, int n, int maxMove, int startRow, int startColumn) {length=m,width=n;int count=0;for (int i=1;i<=maxMove;i++)count=(count+dfs(i,startRow,startColumn))%mod;return count;}int dfs(int times,int x,int y){if (times==0){if (x==-1 or x==length or y==-1 or y==width) return 1;return 0;}if (x==-1 or x==length or y==-1 or y==width) return 0;int count=0;if (x>=0) count=(count+dfs(times-1,x-1,y))%mod;if (x<length) count=(count+dfs(times-1,x+1,y))%mod;if (y>=0) count=(count+dfs(times-1,x,y-1))%mod;if (y<width) count=(count+dfs(times-1,x,y+1))%mod;return count;}
};
记忆搜索
wc超时了,怎么办,怎么办,哎呦,你干嘛啊
TLE:
class Solution {
public:int length,width;vector<vector<vector<int>>> lb;int mod=1e9+7;int findPaths(int m, int n, int maxMove, int startRow, int startColumn) {length=m,width=n;lb.resize(maxMove,vector<vector<int>> (m,vector<int> (n,0)));int count=0;for (int i=1;i<=maxMove;i++)count=(count+dfs(i,startRow,startColumn))%mod;return count;}int dfs(int times,int x,int y){if (times==0){if (x==-1 or x==length or y==-1 or y==width) return 1;return 0;}if (x==-1 or x==length or y==-1 or y==width) return 0;if (lb[times-1][x][y]!=0) return lb[times-1][x][y];int count=0;if (x>=0) count=(count+dfs(times-1,x-1,y))%mod;if (x<length) count=(count+dfs(times-1,x+1,y))%mod;if (y>=0) count=(count+dfs(times-1,x,y-1))%mod;if (y<width) count=(count+dfs(times-1,x,y+1))%mod;lb[times-1][x][y]=count;return count;}
};
我寻思这时间复杂度也不高也就 5 0 3 50^3 503。
破大防了,C(传)T(统)M(美)D(德)。
相关文章:
算法专题:记忆搜索
参考练习习题总集 文章目录 前置知识练习习题87. 扰乱字符串97. 交错字符串375. 猜数字大小II403. 青蛙过河464. 我能赢吗494. 目标和552. 学生出勤记录II576. 出借的路径数 前置知识 没有什么特别知识,只有一些做题经验。要做这类型的题目,首先写出暴…...

【数据分享】1929-2023年全球站点的逐日最低气温数据(Shp\Excel\免费获取)
气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据! 之前我们分享过1929-2023年全球气象站…...
2024美赛数学建模D题思路+模型+代码+论文(持续更新)
2024美赛数学建模A题B题C题D题E题F题思路模型代码论文:开赛后第一时间更新,获取见文末名片 组队环节: 美赛最多是3个人参赛,一般的队伍都是由三人组成(当然如果你很大佬也可以一个人参赛),队伍…...

dubbo+sentinel最简集成实例
说明 在集成seata后,下面来集成sentinel进行服务链路追踪管理~ 背景 sample-front网关服务已配置好 集成 一、启动sentinel.jar 1、官网下载 选择1:在本地启动 nohup java -Dserver.port8082 -Dcsp.sentinel.dashboard.serverlocalhost:8082 -Dp…...

9.2爬楼梯(LC70-E)
算法: 多举几个例子,找规律: 爬到第一层楼梯有一种方法,爬到二层楼梯有两种方法。 那么第一层楼梯再跨两步就到第三层 ,第二层楼梯再跨一步就到第三层(时序)。 所以到第三层楼梯的状态可以由…...

Asp.net移除Server, X-Powered-By, 和X-AspNet-Version头
移除X-AspNet-Version很简单,只需要在Web.config中增加这个配置节: <httpRuntime enableVersionHeader"false" />移除Server在Global.asax文件总增加: //隐藏IIS版本 protected void Application_PreSendRequestHeaders() {HttpContext.Current.Res…...

reactnative 调用原生ui组件
reactnative 调用原生ui组件 1.该样例已textView,介绍。 新建MyTextViewManager 文件,继承SimpleViewManager。import android.graphics.Color; import andr…...
面试手写第五期
文章目录 一. 实现一个函数用来对 URL 的 querystring 进行编码二. 如何实现一个数组洗牌函数 shuffle三. 异步加法的几种方式四. 实现trim函数五. 求多个数组的交集六. 手写实现render函数七. 驼峰转- -转驼峰八. instanceof实现九. 组合问题十. 字符串分组 一. 实现一个函数用…...

【CSS】css选择器和css获取第n个元素(:nth-of-type(n)、:nth-child(n)、first-child和last-child)
:nth-of-type、:nth-child的区别 一、css选择器二、:nth-of-type、:nth-child的区别:nth-of-type(n):选择器匹配属于父元素的特定类型的第N个子元素:nth-child(n):选择器匹配属于其父元素的第 N 个子元素,不论元素的类型:first-child…...

解析Excel文件内容,按每列首行元素名打印出某个字符串的统计占比(超详细)
目录 1.示例: 1.1 实现代码1:列数为常量 运行结果: 1.2 实现代码2:列数为变量 运行结果: 1.示例: 开发需求:读取Excel文件,统计第3列到第5列中每列的"False"字段占…...

qt中遇到[Makfile.Debug:119:debug/app.res.o] Error 1的原因以及解决方法
当我们将项目已到本地qt环境中会出现下图的代码错误 解决方法:在主界面中,点击左边的项目栏,选择构建设置,看Shadow build下面的路径是否为中文,改成英文,或者直接将Shadow build这个 √ 去掉就行了,如图已…...
pytorch调用gpu训练的流程以及示例
首先需要确保系统上安装了CUDA支持的NVIDIA GPU和相应的驱动程序。 基本步骤如下 检查CUDA是否可用: 使用 torch.cuda.is_available() 来检查CUDA是否可用。 指定设备: 可以使用 torch.device(“cuda:0”) 来指定要使用的GPU。如果系统有多个GPU&…...

学习Android的第一天
目录 什么是 Android? Android 官网 Android 应用程序 Android 开发环境搭建 Android 平台架构 Android 应用程序组件 附件组件 Android 第一个程序 HelloWorld 什么是 Android? Android(发音为[ˈnˌdrɔɪd],非官方中文…...

回归预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络多变量回归预测
回归预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络多变量回归预测 目录 回归预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-LSTM【24年新算…...

Typora导出html文件图片自动转换成base64
Typora导出html文件图片自动转换成base64 一、出现问题二、解决方案三、编码实现3.1.创建Java项目3.2.代码3.3.打包成Jar包 四、如何使用endl 一、出现问题 typora 导出 html 的时候必须带有原图片,不方便交流学习,文件太多显得冗余,只有将图…...

『C++成长记』string使用指南
🔥博客主页:小王又困了 📚系列专栏:C 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、string类介绍 二、string类的常用接口说明 📒2.1string类对象的常…...

硬件连通性测试:构建数字世界的无形基石
在当今数字化的时代,硬件设备的连通性对于系统的正常运行至关重要。硬件连通性测试作为确保设备协同工作的关键步骤,扮演着构建数字世界的无形基石的角色。本文将深入探讨硬件连通性测试的意义、方法以及在现代科技生态系统中的重要性。 1. 硬件连通性测…...

mysql的安装与卸载
mysql的安装 mysql 8.0的安装步骤: 1. 从mysql官网上下载mysql安装软件 https://www.mysql.com/ 2. 双击msi文件进行安装 3. 选择安装的类型 选择server only可以远程访问数据库 4. 选择服务并安装 5. 安装中,安装完成后直接next 6. 进入mysql的配置 …...
假期作业 2.2
第一章 命名空间 一.选择题 1、编写C程序一般需经过的几个步骤依次是( B ) A. 编辑、调试、编译、连接 B. 编辑、编译、连接、运行 C. 编译、调试、编辑、连接 D. 编译、编辑、连接、运行 2、所谓数据封装就是将一组数据和与这组数…...

运维SRE-02 正则表达式、grep
1.特殊符号补充 1.1位置相关的特殊符号 . 当前目录 .. 当前目录的上级目录 ~ 当前用户家目录 / 根目录 cd - 返回上次所在目录1.2熟练掌握 # 注释符号,root命令提示符 | 管道符号.1.3了解其他特殊符号 $ 取值(取出变量的值),普通用户的提示符 ! % ^ & * (){} [] ; ? \…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...