来源:投稿 作者:LSC
编辑:学姐
总共时长45分钟,首先是自我介绍,然后开始面试。
二分:
int search(vector& arr, int target) {
int start=0 ,end=arr.size()-1,mid;
while(start<=end){
if(arr[start] == target) {return start;}
mid=(start+end)/2;
if(arr[mid]==target)
{
while(mid >= 1 && arr[mid - 1] == arr[mid]) {mid--;}
return mid;
}
if(arr[start]==arr[mid]) /*无法判断左右区间的增序性*/
{
while(start <= mid && arr[start]==arr[mid])
{++start;} }
else if(arr[mid]>=arr[start]) // 一定要先左再右
{
/*左区间增序*/
if(target>=arr[start]&&target<=arr[mid]){ end = mid-1;}
else{ start=mid+1;}
}
else
{
/*右区间增序*/
if(target>=arr[mid]&&target<=arr[end]){ start = mid+1;}
else { end=mid-1; }
}
}
return -1;
}
Eg:a=”abcdfgd” b=”abcdffd” yes
a=”bbiiom” b=”abiion” no
a=”ccaabb” b=”aabbcc” no
法1: 动态规划 编辑距离
def minDistance(word1, word2):
n, m = len(word1), len(word2)
dp = [[0 for i in range(m + 1)] for i in range(n + 1)]
for i in range(1, n + 1):
dp[i][0] = i
for i in range(1, m + 1):
dp[0][i] = i
for i in range(1, n + 1):
for j in range(1, m + 1):
if word1[i - 1] == word2[j - 1]:
dp[i][j] = dp[i - 1][j - 1]
else:
dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) + 1
return (dp[-1][-1] <= 1)
法2: 直接判断:
(1)先判断两个字符串的长度相差是否大于1,是no,否继续
(2)统计每个字符串中每个字母的个数,再计算相同字母每个字符串的差,用字典来统计,一旦有差大于1,是no,否继续
(3)如果两个字符串等长,遍历两个字符串,是否存在超过1相同位置的值不同的,是no,否yes,不一样长的话,遍历,如果相同位置不同,长的指针向后移动,再次字符不相同就是no,否则yes。
主要介绍项目的数据、任务、模型、参数、优化和结果。
因为我项目的数据收到光照这个因素的影响比较大,所以特地进行数据增强,增加模型的泛化性。
对CRNN比较熟悉,入门ocr必学的经典算法。
CRNN=CNN+RNN+CTC,不用先对单个文字进行切割,而是将文本识别转化为时序依赖的序列学习问题,就是基于图像的序列识别,使用 CTC 损失,把从循环层获取的一系列标签分布转换成最终的标签序列。
此外还有SVTR,是PaddleOCR的PP-OCRv3的主要模型, 模型小, 效果好,主要就是利用Transformer替代了RNN, 得益于self-attention机制, 这样面对不规则文本图像的时候应该有更好的信息抽取能力, 可以更好的抽取有序后验概率矩阵。
PaddleOCR和mmocr框架,这两个都是当下最流行的ocr框架,两种框架的文本检测和识别的代码结构相似,PaddleOCR更全面,我使用频率较高,支持多种语言文本,mmocr对中文支持行较差,总的来说准确率大体都差不多。
关注下方《学姐带你玩AI》
算法工程师万能简历公式+200多个简历模板(中英文)
回复“简历”轻松获取!
码字不易,欢迎大家点赞评论收藏!