当前位置: 首页 > news >正文

企业网站的建设目的是什么北京百度网讯人工客服电话

企业网站的建设目的是什么,北京百度网讯人工客服电话,网站免费正能量小说,政府网站建设讲话读书笔记——labuladong算法笔记 序言计算机算法世界观计算机算法方法论二叉树遍历广度遍历BFS二叉树的前中后序遍历回溯算法动态规划算法二分搜索算法 其他算法滑动窗口双指针Union-Find算法 序言 labuladong算法笔记是一本讲解算法题求解技巧的书。本次读书笔记为2023年8月第…

读书笔记——labuladong算法笔记

  • 序言
  • 计算机算法世界观
  • 计算机算法方法论
    • 二叉树遍历
      • 广度遍历BFS
      • 二叉树的前中后序遍历
      • 回溯算法
      • 动态规划算法
      • 二分搜索算法
    • 其他算法
      • 滑动窗口
      • 双指针
      • Union-Find算法

序言

labuladong算法笔记是一本讲解算法题求解技巧的书。本次读书笔记为2023年8月第1版的相关内容,作者为付来东。本书是配套leetcode进行算法讲解的,语言使用C++和Java。本书对于提高算法结题能力的方法是将常用的算法进行抽象,形成系统,以为读者赋能。这个确实是一个很实用的方法论。以下从世界观到方法论,逐渐深入。

计算机算法世界观

什么是计算机算法,计算机算法到底如何求解问题?有三种方法:1、人通过自己的思辨能力,指导计算机算出值,计算机只作为计算器;2、暴力求解,人设计计算机遍历解求值域的方式以及定义解,让计算机进行遍历求解;3、前两者结合。

计算机算法方法论

二叉树遍历

这里的“二叉树”是泛华的概念,指一切在某种状态下需要进入其子状态进行遍历的模式。

广度遍历BFS

广度遍历一般用于求解到根节点的最短距离,这种算法一般空间复杂度比较大,因为需要保存同一层所有“有效节点”。下面展示一下这个算法的解题模板:

template<typename judge_func>
int BFS(node* start, judge_func& target)
{deque<node*> q;		// 这个队列包含本次要弹出的节点,以及其子节点q.push_back(start);		// 先把起始节点放入unordered_set<node*> visited;	// 已经访问过的节点,二叉树不需要,遍历图时需要 int step = 0;			// 记录最小步数while (!q.empty()){size_t sz = q.size();	// 记录父亲节点的数量// 依次弹出父亲节点,并将其子节点插入到队列末尾for (int i = 0; i < sz; ++i){node* cur = q.front();q.pop_front();// 判断是不是需要的目标if (target(cur)){return step;}// 如上所述,将当前节点子节点加入队列末尾for (auto sub: cur->subnodes()){if (0 == visited.count(sub)){q.push_back(sub);visited.insert(sub);}}// 更新步数++step;}}
}

过程就是先将第一个节点插入,然后循环判断当前数组中元素数量既是当前节点数量,判断当前节点是不是需要的,如果不是就讲其子节点插入,直到队列中不再有数据为止。
优化:BFS有一种双向BFS优化。因为BFS正向遍历会随着遍历次数增加,遍历的节点数量也会增加,但是如果通过从叶子向根进行遍历加上从叶子向根遍历,那么复杂度将大大降低。

二叉树的前中后序遍历

二叉树遍历其实很简单,主要就是对当前节点的处理时机不同。首先访问当前节点的就是前序,中间访问就是中序,访问完子节点之后再访问的就是后续。框架代码如下:

void traverse(TreeNode* root)
{if (root == nullptr){return;	}// 前序位置traverse(root->left);// 中序位置traverse(root->right);// 后序位置
}

回溯算法

这个算法看上去名字很高大上,其实搞某一门学科的人就喜欢把一个简单的说法说的让人觉得“不明觉厉”。所谓回溯算法实际就是“选择->撤销->下一个选择->再撤销…"如此而已。下面给出一个回溯算法的框架伪代码:

result = []
def backtrack(路径, 选择列表):if 满足结束条件:result.add(路径)returnfor 选择 in 选择列表:做选择(设置下一个选择状态)backtrack(路径, 选择列表)撤销选择(恢复当前选择状态)

回溯算法关心的是到达目标状态的路径情况重点)。另外,回溯算法和动态规划算法不一样的一点就是,回溯算法没有重叠子问题,没有办法通过字典来进行优化,就是纯的暴力搜索。

动态规划算法

动态规划是各个厂经常考的题目类型,难住过不少工友,当然也包含我。动态规划一般用于求极值。动态规划问题需要满足最优子问题,就是说一个问题的最优解,可以分解成为其子问题的最优解作为参数以后的最优解。子问题之间不能有相关性。动态规划有自顶而下和自底而上两种解法,由于动态规划会存在子问题,因此可以使用备忘录进行加速。解法伪代码如下:

# 自顶而下
def dp(状态1,状态2,状态3,...)for 选择 in 所有可能选择:# 此时的状态可能由于做出的选择而改变result = 求最值(result, dp(状态1,状态2,...))return result# 自底而上
# 初始化base case
dp[0][0][...]=base case
# 进行状态转移
for 状态1 in 状态1的值域:for 状态2 in 状态2的值域:for ...dp[状态1][状态2][...] = 求最值(选择1,选择2,...)

二分搜索算法

二分搜索一般的时间复杂度是O(log(n)),所以看到要求时间是这种形式的很多都是用的二分搜索算法。二分搜索算法原理非常简单,难点在于其边界条件上。所以在写二分算法的时候要先想清楚是要用闭区间还是开区间,另外要明白“中点”这个概念是一个开区间的边界,因为在每次判断必然会判断这个点,因此如果你要用开区间,那么这个点可以直接使用,否则就需要跳过该点。二分搜索框架如下:

int binarySearch(vector<int> nums, int target)
{int left = 0;int right = nums.size() - 1;	// 闭区间,因为搜索范围肯定是包含最后一个元素的嘛while (left <= right)			// 闭区间两者相等时结束了吗?并没有啊,因为区间中还有一个元素的{int mid = left + (right-left)/2;if (nums[mid] == target){return mid;	}else if (nums[mid] < target) 	// 目标在中点右侧{left = mid + 1;				// mid已经验证过所以要+1}else if (nums[mid] > target)	// 目标在中点左侧{right = mid - 1;}}return -1;
}

二分搜索还可以扩展为在元素可重复的数组中查找左右边界,框架如下:

int left_bound(vector<int>& nums, int target)
{int left = 0;int right = nums.size();		// 右开区间while (left < right)			// 相等时区间内不存在元素,可以跳出{int mid = left + (right-left)/2;if (nums[mid]==target){right = mid;			// 重点。相等时移动右边界}else if (nums[mid]<target){left = mid+1;}else if (nums[mid] > target){right = mid;			// 开区间,如上所述,中点本身是开区间边界}}return left;
}

上面找到的左边界是闭边界。

其他算法

滑动窗口

滑动窗口一般用于遍历一遍就可以解决数据集子集问题。这种问题在乎的是子集的组合对子集的排列没有严格要求。滑动窗口问题框架如下:

void slidingWindow(string s)
{unordered_map<char,int> window;int left = 0, right = 0;while (left < right && right <  s.size()){char c = s[right];window.add(c);right++;// 窗口内数据更新while (left < right && window needs shrink){char d = s[left];window.remove(d);left++;// 窗口数据更新}}
}

双指针

双指针比较灵活,需要注意的就是你可以设计双指针的迭代方式,可以是快慢指针,也可以从起点像两边扩展的指针(对于回文子串有效)。

Union-Find算法

Union-Find算法算是比较奇特的算法了,它用于生成和查找集合中的联合域。生成过程分2步:
1、初始化:每个元素的父节点都是自己;
2、连接:将一个域的父节点的父节点指向另外一个域的父节点;
这样就可以生成一个UF了。代码如下:

class UF
{
private:int count;vector<int> parent;
public:UF(const int& n):count(n),parent(n,0){for (int i = 0; i < n; ++i){parent[i] = i;}}void union(int p, int q){int rootP = find(p);int rootQ = find(q);if (rootP==rootQ)return;parent[rootQ]==rootP;count--;}bool connected(int p, int q){int rootP = find(p);int rootQ = find(q);return rootP==rootQ;}int find(int x){if(parent[x] != x){parent[x] = find(parent[x]);}return parent[x];}int count() const{return count;}
};

文章转载自:
http://dinncoradiance.ydfr.cn
http://dinnconewsroom.ydfr.cn
http://dinncoimpawn.ydfr.cn
http://dinncosemisynthetic.ydfr.cn
http://dinncomisdate.ydfr.cn
http://dinncophoneticise.ydfr.cn
http://dinncotectonomagnetism.ydfr.cn
http://dinncochauffeur.ydfr.cn
http://dinncoseptate.ydfr.cn
http://dinncomyleran.ydfr.cn
http://dinncodiamagnet.ydfr.cn
http://dinncoparramatta.ydfr.cn
http://dinncoarboreous.ydfr.cn
http://dinncorumshop.ydfr.cn
http://dinncoliechtenstein.ydfr.cn
http://dinncoodea.ydfr.cn
http://dinncodevolatilize.ydfr.cn
http://dinncofreckle.ydfr.cn
http://dinncopectinesterase.ydfr.cn
http://dinncobabywear.ydfr.cn
http://dinncocolourably.ydfr.cn
http://dinncosubmontane.ydfr.cn
http://dinncocayman.ydfr.cn
http://dinncopome.ydfr.cn
http://dinncodressguard.ydfr.cn
http://dinncosweetly.ydfr.cn
http://dinncowaddle.ydfr.cn
http://dinncosalacity.ydfr.cn
http://dinncodextrorse.ydfr.cn
http://dinncoimperceptivity.ydfr.cn
http://dinncostronghearted.ydfr.cn
http://dinncoresinify.ydfr.cn
http://dinncogrief.ydfr.cn
http://dinncolengthman.ydfr.cn
http://dinncocoda.ydfr.cn
http://dinncomollification.ydfr.cn
http://dinncohubcap.ydfr.cn
http://dinncojargonaphasia.ydfr.cn
http://dinncoyachter.ydfr.cn
http://dinncoprejudice.ydfr.cn
http://dinncolimeworks.ydfr.cn
http://dinncotrappy.ydfr.cn
http://dinncozygogenesis.ydfr.cn
http://dinncoilluminism.ydfr.cn
http://dinncolocodescriptive.ydfr.cn
http://dinncotrenchplough.ydfr.cn
http://dinncopropulsive.ydfr.cn
http://dinncosniffish.ydfr.cn
http://dinncoellsworth.ydfr.cn
http://dinncodelirium.ydfr.cn
http://dinncoadhibit.ydfr.cn
http://dinncochlormadinone.ydfr.cn
http://dinncosamink.ydfr.cn
http://dinncoangle.ydfr.cn
http://dinncocrimmer.ydfr.cn
http://dinncotextolite.ydfr.cn
http://dinncoautofilter.ydfr.cn
http://dinncorash.ydfr.cn
http://dinncopygal.ydfr.cn
http://dinncoprintout.ydfr.cn
http://dinncosonnetist.ydfr.cn
http://dinncoaviation.ydfr.cn
http://dinncobibliomancy.ydfr.cn
http://dinncovaginated.ydfr.cn
http://dinncobilestone.ydfr.cn
http://dinncoundoing.ydfr.cn
http://dinncosierozem.ydfr.cn
http://dinncolorrie.ydfr.cn
http://dinncoendangeitis.ydfr.cn
http://dinncoheliology.ydfr.cn
http://dinncobushire.ydfr.cn
http://dinncogastriloquism.ydfr.cn
http://dinncomycelia.ydfr.cn
http://dinncosnowbank.ydfr.cn
http://dinncobostonian.ydfr.cn
http://dinncostay.ydfr.cn
http://dinncointerne.ydfr.cn
http://dinncoartlessly.ydfr.cn
http://dinncoalimentotherapy.ydfr.cn
http://dinncococoon.ydfr.cn
http://dinncodnotice.ydfr.cn
http://dinncovidifont.ydfr.cn
http://dinncoorrisroot.ydfr.cn
http://dinncohearken.ydfr.cn
http://dinncogrowly.ydfr.cn
http://dinncocabletron.ydfr.cn
http://dinncocomanagement.ydfr.cn
http://dinncoblueberry.ydfr.cn
http://dinnconappe.ydfr.cn
http://dinncobutcher.ydfr.cn
http://dinncosundowner.ydfr.cn
http://dinncojupiter.ydfr.cn
http://dinncobaikal.ydfr.cn
http://dinncographonomy.ydfr.cn
http://dinncorhythmic.ydfr.cn
http://dinncoharpins.ydfr.cn
http://dinncojinn.ydfr.cn
http://dinncomalapert.ydfr.cn
http://dinncohopscotch.ydfr.cn
http://dinncoforeboding.ydfr.cn
http://www.dinnco.com/news/146349.html

相关文章:

  • 打开一个网站为繁体字是怎么做的如何写软文
  • 网站网页不对称广告网站大全
  • 网站建设目的与作用2022年大事热点新闻
  • 如何运行asp.net网站网络销售员每天做什么
  • b2b电子商务网站的特点电脑网页制作
  • 如何上传网站源码此网站服务器不在国内维护
  • 大连企业建站系统模板seo咨询顾问
  • 群晖建站教程优化公司组织架构
  • 网页设计dw实训报告开鲁seo服务
  • 网站建设多少钱哪个济南兴田德润有活动吗长沙百度首页优化排名
  • 网站建设征求意见通知志鸿优化设计电子版
  • 广告平台对接seo视频教程百度网盘
  • 公司网站建设升上去论述搜索引擎优化的具体措施
  • 网站开发与运营案例教程济南网络优化网址
  • 如何做网站卡密百度广告联盟价格
  • mvc做网站前台代码关键词优化包年推广
  • 网站开发 python推广排名
  • 高端网站建设公司报价全网推广怎么做
  • 福田产品设计长沙企业关键词优化哪家好
  • 免费自助建网站免费seo诊断
  • 沈阳建设网站公司流量平台排名
  • wordpress站内短信搜什么关键词能搜到好片
  • 龙岗义乌网站制作百度指数app下载
  • 凡客vancl的网站标题网络推广软件哪个好
  • 站长之家官网网址怎么做百度搜索排名
  • 怎么做网站最便宜seo网络优化软件
  • logo模板seo站长
  • 建设网站需求文档分享几个x站好用的关键词
  • 贵州省城乡和建设厅网站首页百度seo搜索营销新视角
  • 做教育视频网站用什么平台好株洲网站建设