算法与数据结构
算法与数据结构
Marco&GalaxyDragon
这个作者很懒,什么都没留下…
展开
-
计数问题
计数问题是在离散数学以及算法设计中非常容易碰到的一类问题。计数问题都可以归结成从集合中取元素的问题。 难点主要是 1.每次取完一个元素后,是否会使集合发生变化(例如集合元素减少),此时之后再次取元素就会受到影响,如果不考虑清楚这点很容易出错。 有些问题是从不同的集合中取元素,有些问题是从单个集合中取元素(此时基本上都会使集合发生改变) 2.如何把一个现实问题考虑成从一个集合中取元素的计原创 2018-01-08 19:05:45 · 2533 阅读 · 0 评论 -
离散数学-数学归纳法(1)
数学归纳法是一种证明技术,除了在数学领域中有很大作用外。在编程领域中,也常常使用它的某种变体来证明算法的正确性(在算导里面就多次用到该技术,来证明各种算法,特别是一些比较复杂的图算法的正确性)个人感觉,学习数学归纳法以及经过一段时间的练习后,可以非常自然的把一些算法,看成数学归纳法中的几个组成块,大大减少了写算法时出错概率(特别是相对复杂的算法,不好直接看出因果的),而且知道了如何推导算法的正原创 2018-01-06 00:14:37 · 3164 阅读 · 0 评论 -
求按字典序全排列的中间值
原题地址https://www.codewars.com/kata/58ad317d1541651a740000c5/java一个串的全排列 例如abc 为 "abc", "acb", "bac", "bca", "cab", "cba"求全排列的算法为 循环该串,轮流取出一个字符,之后再求剩下的串的全排列在进行合并。 public static List<Strin...原创 2020-02-08 22:21:21 · 396 阅读 · 0 评论 -
动态规划求解带权有向图最短路径问题
求带权有向图的最短路径问题,最通用也是最容易想到的就是用Dijkstra算法求解,但是有一部分特定的带权有向图最短路径问题也可以用动态规划求解。这道题看到第一眼很明显就可以生成一张图,然后用带权图的最短路径搜索来做,即Dijkstra算法,但是实际上也可以用动态规划来做,而且这种题还是非常典型的动态规划题目。得出一个动态规划算法的要点就是想出状态转移方程,这道题的状态转移方程非常明...原创 2020-02-08 17:11:56 · 3699 阅读 · 0 评论 -
有向图的拓扑排序算法-从部分字符的序对恢复字符串
这是一道Codewar上的题,地址为https://www.codewars.com/kata/53f40dff5f9d31b813000774大致题目为从一个字符串中按顺序抽取一些单字符,给出一些这样的排列,然后让你恢复这个隐藏的字符串,给出的排列是能确定一个唯一的字符串的。如给出 {'t','u','p'}, {'w','h','i'}, {'...原创 2020-02-07 21:21:40 · 264 阅读 · 0 评论 -
ruby普通二分查找和递归二分查找
#普通二分查找 def binSearch(arr,value) left=0 right=arr.length-1 while left<=right center=(left+right)/2 if arr[center]== value return center elsif arr[center]<value原创 2017-12-16 14:42:04 · 387 阅读 · 0 评论 -
Ruby插入排序的常规写法和递归写法
用循环的常规写法arr=[5,2,3,1,4]#循环下表1~arr.length,注意初始时最左边因为只有一个值,所以可以看成左边数组0~1已经有序1.upto arr.length-1 do |outIndex| #取值 element=arr[outIndex] #生成子下标,数值为外部下标的左边一位(因为自己与自己比较没有意义) index=outIndex-1 #下标原创 2017-12-16 13:34:36 · 322 阅读 · 0 评论 -
埃拉托斯特尼筛法详解及实现
埃拉托斯特尼筛法是一个快速获取小于数X的所有素数集合的算法。 首先我们要明确,假设一个合数x能表示为两个数的乘积,他必定有一个小于等于sqrt(x)的因子,这可以用归谬证明法证明。如果两个因子都大于sqrt(x),那么乘积大于x,这和假设矛盾。 所以,判断一个数x是否是合数,只要依次除以2至sqrt(x)间的素数,判断是否整除即可。埃拉托斯特尼筛法基于以下原理,给定一个素数n>1,k...原创 2018-03-08 23:48:32 · 10680 阅读 · 2 评论