Recursion, Backtracking and Dynamic Programming in Java

所在平台: Udemy

课程主页: https://www.udemy.com/course/algorithmic-problems-in-java/

课程评论:没有评论

第一个写评论        关注课程

课程简介

**Java 递归、回溯与动态规划课程总结** 本课程深入探讨了算法设计中的核心概念,包括递归、回溯、动态规划和分治策略。这些技术在软件工程、投资银行和研发等多个领域至关重要。 **课程内容概览:** * **递归 (Recursion):** * 理解递归概念及递归方法。 * 了解栈内存和堆内存。 * 学习栈溢出(Stack Overflow)的原因。 * 学习斐波那契数列 (Fibonacci numbers) 和阶乘 (Factorial function) 的递归实现。 * 解决经典的汉诺塔 (Tower of Hanoi) 问题。 * **搜索算法 (Search Algorithms):** * 线性搜索 (Linear search)。 * 二分搜索 (Binary search)。 * **选择算法 (Selection Algorithms):** * 了解选择算法的概念。 * 学习如何在线性时间(O(N))内找到第 k 小的元素(k-th order statistics)。 * 实现快速选择算法 (Quickselect algorithm) 和中位数的中位数算法 (Median of medians algorithm)。 * 讨论秘书问题 (Secretary problem)。 * **位运算问题 (Bit Manipulation Problems):** * 二进制数表示。 * 逻辑运算符和移位运算符。 * 判断奇偶数。 * 计算二进制长度。 * 俄罗斯农夫乘法 (Russian peasant multiplication)。 * **回溯 (Backtracking):** * 学习回溯法的基本思想。 * 解决 N 皇后问题 (N-Queens problem)。 * 解决汉密尔顿回路问题 (Hamiltonian cycle problem)。 * 解决图的着色问题 (Coloring problem)。 * 解决骑士周游问题 (Knight's tour problem)。 * 开发一个数独求解器 (Sudoku game)。 * **动态规划 (Dynamic Programming):** * 理解动态规划的核心概念。 * 解决背包问题 (Knapsack problem)。 * 解决钢管切割问题 (Rod cutting problem)。 * 解决子集和问题 (Subset sum problem)。 * 学习 Kadane's 算法(最大子数组和)。 * 解决最长公共子序列 (Longest Common Subsequence, LCS) 问题。 * **最优装箱 (Optimal Packing):** * 理解最优装箱问题的概念。 * 学习装箱问题 (Bin packing problem)。 * **分治法 (Divide and Conquer Approaches):** * 理解分治法的基本策略。 * 探讨动态规划与分治的关系。 * 学习如何用归并排序 (Merge Sort) 实现 O(N log N) 的排序。 * 解决最近点对问题 (Closest pair of points problem)。 * **常见面试题 (Common Interview Questions):** * 分析 Google、Facebook 和 Amazon 等公司的热门面试题。 * 解决回文词问题 (Anagram problem)。 * 解决回文检查问题 (Palindrome problem)。 * 解决接雨水问题 (Trapping rain water problem)。 * 解决扔鸡蛋问题 (Egg dropping problem)。 * 解决荷兰国旗问题 (Dutch national flag problem)。 在每个章节,除了理论讲解,还将从零开始用 Java 实现这些算法。本课程旨在帮助学员掌握解决算法问题的关键技巧,并准备好应对技术面试。

课程评论(0条)

课程详情

This course is about the fundamental concepts of algorithmic problems focusing on recursion, backtracking, dynamic programming and divide and conquer approaches. As far as I am concerned, these techniques are very important nowadays, algorithms can be used (and have several applications) in several fields from software engineering to investment banking or R & D.Section 1 - RECURSIONwhat are recursion and recursive methodsstack memory and heap memory overviewwhat is stack overflow?Fibonacci numbersfactorial functiontower of Hanoi problemSection 2 - SEARCH ALGORITHMSlinear search approachbinary search algorithmSection 3 - SELECTION ALGORITHMSwhat are selection algorithms?how to find the k-th order statistics in O(N) linear running time?quickselect algorithmmedian of medians algorithmthe secretary problemSection 4 - BIT MANIPULATION PROBLEMSbinary numberslogical operators and shift operatorschecking even and odd numbersbit length problemRussian peasant multiplicationSection 5 - BACKTRACKINGwhat is backtracking?n-queens problemHamiltonian cycle problemcoloring problemknight's tour problemSudoku gameSection 6 - DYNAMIC PROGRAMMINGwhat is dynamic programming?knapsack problemrod cutting problemsubset sum problemKadan's algorithm (maximum subarray)longest common subsequence (LCS) problem Section 7 - OPTIMAL PACKING what is optimal packing?bin packing problemSection 8 - DIVIDE AND CONQUER APPROACHESwhat is the divide and conquer approach?dynamic programming and divide and conquer methodhow to achieve sorting in O(NlogN) with merge sort?the closest pair of points problemSection 9 - COMMON INTERVIEW QUESTIONStop interview questions (Google, Facebook and Amazon)anagram problempalindrome problemtrapping rain water problemegg dropping problemdutch national flag problemIn each section we will talk about the theoretical background for all of these algorithms then we are going to implement these problems together from scratch in Java.Finally, YOU CAN LEARN ABOUT THE MOST COMMON INTERVIEW QUESTIONS (Google, Microsoft, Amazon etc.)Thanks for joining the course, let's get started!

课程标签

0人关注该课程

主题相关的课程