机试算法

计算机复试和公司入职考试很多会考算法,如果把计算机复试的基本掌握,算法题就总体很简单了。

算法分类:

1.暴力求解。

   利用循环

2.贪心算法。

   1)利用很明显的极限

    2)不太明显的,但是局部不影响其他,递进推出最优解。比如旅行加油问题

3.数据结构

   1)队列,做BFS. 因为BFS在距离都同的情况下,有最近的属性,所以可以做最短步骤搜索。比如解锁问题。java中的队列,和C++中的队列。

    C++中的队列,queue.priority_queue。 优先队列可以重载数据结构运算符,来达到根据需要进行排序的功能。比如最短路以距离为排序规则,每次头部都是最短距离。

   2)栈,DFS。主要是类似暴力求解。有时候能得到最优解的时候,记得直接退出所有递归。 否则有些算法走不动。

   3)map。Java里有hashmap和treemap. C++里的map。给予红黑树的底层有序,会默认按照字母表顺序排列,有些问题可能会用到。

    4)set。长用来去重。java里应该有个函数直接看包含否。C++里可以直接用count看是否已经包含了。

   5)其他结构体,根据需要进行定义。C++里结构体可以有构造函数。Java全都是类,按照类就行了。

4. 模式匹配。

   字符串模式匹配记得利用next数组进行变换就行了。

5. 排序和查找

   java里面冲在compare那个类似这样的函数可以根据需要排序。C++里也可以冲在运算符或者写一个bool函数来进行排序。

  查找有二分查找。

6. 数学问题,比如多次幂,最大公约数,最小公倍数,进制转换等。知道公式事半功倍。

7.递归。递归逻辑一般比较明显,注意题目的时间要求,如果时间很短,说明不适合递归。可以改成动态规划直接来做。

8.搜索

DFS和BFS

9.图论

邻接矩阵,邻接表存边集。 还有并查集。利用Father[]数组存储共同的头结点,相同说明统一集合。Height[]数组存储书高度,方便进行合并。find查找father数组并且进行压缩。

并查集可以用来做很多事,比如:判断集合是否同一个。很多城市联通还需要几条路,prim算法,最短路也可以实现。

Dijkstra算法。经典。

10.动态规划

 递归变化,最大连续子序列和。最长递增子序列,最长公共子序列。核心思想类似于数学上的归纳法。设好矩阵ij代表的两种信息,然后以0,1等明显的开始,推出递推公式然后进行演算。

背包问题,0-1背包,取或不取。 完全背包:可以随便取。多重背包:利用2进制分解法,使得其分解成各种0-1背包问题,所有的物品加起来能形成任何数目。比如7分解为4,2,1所有1-7都可以表示。转化为0-1背包。

 

以目前学校的难度看,985有名计算机学校出的算法题最高难度可拿分的基本也就是动态规划,模式匹配,背包问题这种级别。 网路面试来说。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小公子三木君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值