
算法
文章平均质量分 84
笛在月明
我们采集的只是石头,却必须时刻展望未来的大教堂。
展开
-
运煤车的最大路程
用重载列车运煤,每次可装1万吨,每行驶1公里耗煤1吨,起点处共有N万吨煤(简单起见N为正整数),请问最远可运至何处(是国营煤老板,成本不计,只要运到的数量大于0就算成功)?并求N→∞时的渐进形式。分析: 说白了,这个问题就是问火车最远可以走多远,问题的关键是要尽可能地消耗完所有的煤。为了达成这个目的,需要来回多趟,并且尽可能用满列车的运载量。还有一个要求,就是不要在同一段路上消耗太多的煤。(即来回转载 2016-08-04 22:54:06 · 1130 阅读 · 0 评论 -
查找单词是否存在于单词表格中
问题: 给定一个2维字母组成的矩阵,水平或垂直的字母可以连成一个单词,给定一个单词,判断其是否在给定的矩阵中。每个字母只能被使用一次。 举例: [ [‘A’,’B’,’C’,’E’], [‘S’,’F’,’C’,’S’], [‘A’,’D’,’E’,’E’] ] 则根据规则:”ABCCED”, -> returns true, “S原创 2017-01-24 22:46:56 · 1572 阅读 · 0 评论 -
python进行桶排序与基数排序总结
本文首先举例阐述了两种排序方法的操作步骤,然后列出了用python进行的实现过程,最后对桶式排序方法的优劣进行了简单总结。一、桶排序:排序一个数组[5,3,6,1,2,7,5,10]值都在1-10之间,建立10个桶:[0 0 0 0 0 0 0 0 0 0] 桶[1 2 3 4 5 6 7 8 9 10] 桶代表的值遍历数组,第一个数字5,第五个桶加1[0 0 0 0 1 0 0 0 0原创 2017-02-02 20:29:54 · 3130 阅读 · 0 评论 -
平衡数
假定我们定义一个数值序列可以被分成两部分,使得这两部分的乘积相等,这样的数列为平衡数,如1236中,1*2*3=6, 为平衡数。现给定一个数列,判断是否为平衡数。 分析: 此题有多种解法,首先最原始的想法是顺次设置分隔符,然后比较分割后的两个子串的乘积,为了提高检查效率,可以首先过滤掉非完全平方数,即数字开方后不为整型的数字,但是这样增加了计算复杂度。 def balance_num_ini原创 2017-03-24 15:22:53 · 1813 阅读 · 0 评论 -
盘点机器学习中常见的损失函数和优化算法
在机器学习中,对于目标函数、损失函数、代价函数等不同书上有不同的定义。通常来讲,目标函数可以衡量一个模型的好坏,对于模型的优化通常求解模型的最大化或者最小化,当求取最小化时也称loss function即损失函数,也称为成本函数、代价函数。 大多数情况下两者并不做严格区分。损失函数包含损失项与正则项。正则项的目的是提高模型的泛化能力,防止过拟合。本文仅讨论损失项,下面是一些常见的损失函数的损失项。原创 2017-08-19 16:23:10 · 7674 阅读 · 0 评论 -
RL,MAB与Contextual Bandits区别
Contextual Bandits介于RL与MAB之间。RL: 动作改变状态,奖励由状态,动作决定CB: 动作不改变状态,奖励由状态,动作决定MAB:动作不改变状态,奖励只由动作决定linUCB是Contextual Bandits的一种方法。其基本思想是用函数近似期望收益,对于每一个动作,学习一个这样的估计函数,当面临新的状态s的时候,先估计每个动作的期望收益 ,再根据UCB算法挑一个动作原创 2017-12-18 16:02:56 · 3225 阅读 · 0 评论 -
变位词
变位词是指由变换个别词或短语的字母顺序构成的新的词或短语,例如“triangle”是“integral”的变位词。今天要解决的问题是编写一个方法,对字符串数组进行排序,将所有变位词排在相邻的位置。 分析: 由于变位词仅仅是不同字符串的字符顺序不同,比较简单的一种想法是将所有字符串内部字符进行排序,若两个字符串互为变位词,则排序后就相同,另外一种方法是数一下各个字符串中各个字符出现的次数,如...原创 2018-02-13 17:27:55 · 1206 阅读 · 0 评论 -
Datacastle算法竞赛-精品旅行服务成单预测-AUC:0.94+解决方案
Datacastle在前一段时间发布了一个算法竞赛-精品旅行服务成单预测。当时空闲时间比较多就报名参加了,后面为了赶论文进度没有继续做下去,最后的一次提交结果是0.94+的auc。共计提取了76个特征,分别使用了基于权重和stacking的模型融合方法,下面是对特征和模型的一些整理。 一、特征 1.基本信息:如用户性别,省份,年龄等。 2.历史订购信息:之前是否购买过精品,订购每种类型订单的...原创 2018-02-13 19:35:13 · 1711 阅读 · 11 评论 -
leetcode 23. Merge k Sorted Lists 几种解法
1.取值排序法 首先我们最先想到的可能是将所有链表的值放进一个数组中,然后进行排序,最后将排序后的元素依次构建新的链表。代码如下: class Solution(object): def mergeKLists(self, lists): """ :type lists: List[ListNode] :rtype: ListNo...原创 2018-05-03 22:40:51 · 556 阅读 · 0 评论 -
机器学习常见的问题总结(四)
1.二阶收敛为什么比一阶收敛更快? 一阶收敛是以1/n的速度收敛,二阶收敛是以1/(n^2)的速度收敛,所以速度比较快。 2.拟牛顿法是如何近似海塞矩阵的?3.为什么BFGS效果要好于DFP? BFGS优于DFP的原因在于,BFGS有自校正的性质(self-correcting property)。通俗来说,如果某一步BFGS对Hessian阵的估计偏了,导致优化变慢,那么BFGS会在较...原创 2018-05-17 15:09:39 · 1297 阅读 · 0 评论 -
单调栈
单调栈是一种特殊的栈,栈内元素保持递增或者递减。 单调栈有两个性质: 1.满足从栈顶到栈底的元素具有严格的单调性 2.满足栈的后进先出特性越靠近栈底的元素越早进栈 利用单调栈,可以找到从左/右遍历第一个比它小/大的元素的位置,在某些问题中可以将时间复杂度从O(N^2)降低为O(N).如leetcode 84. Largest Rectangle in Histogram. 这道题的描述...原创 2018-05-11 15:44:16 · 801 阅读 · 0 评论 -
使用tensorflow seq2seq进行时间序列预测
时间序列预测可以根据短期预测,长期预测,以及具体场景选用不同的方法,如ARMA、ARIMA、神经网络预测、SVM预测、灰色预测、模糊预测、组合预测法等等。所谓没有最好的模型,只有最适合的模型。至于哪一种模型能针对特定预测问题达到最高的精度,需要通过实验来证明。本文通过生成的随机数利用tensorflow的seq2seq模型进行单变量时间序列预测实验,目的是理解seq2seq的模型基础架构以及验证模...原创 2018-05-11 16:56:52 · 16766 阅读 · 12 评论 -
leetcode动态规划小结-持续更新中
1.动态规划专区 300. Longest Increasing Subsequence Given an unsorted array of integers, find the length of longest increasing subsequence.For example, Given [10, 9, 2, 5, 3, 7, 101, 18], The longest ...原创 2018-05-11 21:53:07 · 1170 阅读 · 0 评论 -
leetcode 树相关题目小结
leetcode 98. Validate Binary Search Tree Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as follows: The left subtree of a node conta...原创 2018-05-13 15:07:49 · 1669 阅读 · 0 评论 -
有序数组旋转后的元素值查找
假定有一个升序排序的有序数组,在某个位置进行了分组交换,保持交换后的循环方向不变,如0 1 2 4 5 6 7可能会变成 4 5 6 7 0 1 2,前后收尾连成环,仍然保持不变,现有一个旋转后的数组,如何寻找他的旋转点呢?def search(self, nums, target): if not nums: return -1 low, hi原创 2017-01-21 23:28:14 · 873 阅读 · 0 评论 -
Longest Common Prefix
Write a function to find the longest common prefix string amongst an array of strings.解法一: 巧妙运用zip函数class Solution: # @return a string def longestCommonPrefix(self, strs): if not s原创 2017-01-15 15:39:26 · 985 阅读 · 0 评论 -
基础算法系列总结:动态规划(解公司外包成本问题)
本文转自http://www.cnblogs.com/Creator/archive/2011/05/17/2048302.html理论辅助: 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题转载 2016-08-04 22:52:45 · 1075 阅读 · 0 评论 -
遗传算法类OX交叉选择算法的python实现
与背包问题不同,在求解TSP问题时,染色体编码采用整数编码而不是二进制编码,对于每个城市用一个整数来编号,一个路径就是一条染色体编码。在进行选择运算时,常采用类OX交叉算法,其思路为: 假设 父代 A 1250|436|798 父代 B 3097|654|281 对染色体切片后随机选择一个片段,比如父代B的中间片段654,作为子代的一个片段,在父代A中选择A中存在而父代B中选择的片段原创 2016-08-20 21:15:38 · 5141 阅读 · 0 评论 -
最长回文子串
题目描述给定一个字符串,求它的最长回文子串的长度。分析与解法最容易想到的办法是枚举所有的子串,分别判断其是否为回文。这个思路初看起来是正确的,但却做了很多无用功,如果一个长的子串包含另一个短一些的子串,那么对子串的回文判断其实是不需要的。为此,我们可以枚举中心位置,然后再在该位置上用扩展法,记录并更新得到的最长回文长度。参考代码如下:#-*-encoding:utf-8-*-def Longest原创 2016-08-24 20:54:46 · 420 阅读 · 0 评论 -
寻找和为定值的两个数
描述: 输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(N)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。分析: 如果采取穷举,复杂度为O(N^2),可以换一个思路,题目相当于对每个a[i],查找sum-a[i]是否也在原始序列中,每一次要查找的时间都原创 2016-08-26 21:24:11 · 831 阅读 · 0 评论 -
EM算法小结
EM算法进行参数估计的主要思想是: 目的是给定观测变量数据和隐变量数据以及分布函数来估计模型参数,首先选择参数的初始值,计算在此参数下观测数据来自各种可能(模型)的概率,这一步实现了将隐变量显式化,求得参数新的估计值,据此得到在新参数下的目标函数期望(E),然后求解不完全数据对数似然函数的极大似然估计(M),当优化目标不再变化时收敛,得到参数的估计值。 最终的优化目标是:给定观测数据和当前参数下原创 2016-11-10 23:41:00 · 696 阅读 · 0 评论 -
基于Lagrange-Newton法的SQP局部算法python实现
序列二次规划(SQP)是解决约束优化问题中较好的一种算法,其流程为 scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)[source]mi原创 2016-12-20 12:20:26 · 5558 阅读 · 1 评论 -
数字黑洞
数字黑洞给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。例如,我们从6767开始,将得到7766 - 6677 = 10899810 - 0189 = 96219621 - 1269 = 83528532 -转载 2016-06-17 23:42:31 · 631 阅读 · 0 评论 -
字符串匹配
在进行字符串匹配时,发现逻辑没有什么问题,但是匹配不到正确的结果,比如:if re.search(trans_word0,txtlist[fc]) and re.search(trans_word1,txtlist[fc]) and re.search(trans_word2,txtlist[fc]): freq[word] = freq.get(word, 0) + 1 t原创 2016-10-13 08:45:57 · 474 阅读 · 0 评论 -
python实现快速排序算法
很多基础的算法只看不写很容易忽略其中的细节,对于既不浪费空间又可以快一点的快速排序算法,用python重新实现了一遍,下面具体的实现方法,仅供参考。def quicksort(left,right): if left>right: return temp=a[left] i=left j=right while i!=j: whi原创 2016-09-16 15:29:05 · 546 阅读 · 0 评论 -
定和因子组合的最小值
# -*- coding: utf-8 -*-'''输入一个正整数x,返回一个各位(个十百千万等)数字相乘为x的最小的数; 例如: 15 则返回 35 (因为3*5=15,35比53要小)'''def mulcum(n): minc=0 l=[] if n<0: return -1 for原创 2016-09-11 22:59:46 · 713 阅读 · 0 评论 -
最大子列和问题
描述: 给定KKK个整数组成的序列{ N1N_1N1, N2N_2N2, …, NKN_KNK },“连续子列”被定义为{ NiN_iNi, Ni+1N_{i+1}Ni+1, …, NjN_jNj },其中 1≤i≤j≤K1 \le i \le j \le K1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2原创 2016-08-21 16:54:54 · 1172 阅读 · 0 评论 -
Trie树实现词频统计与查找
#encoding:utf-8from collections import defaultdictimport sysreload(sys) sys.setdefaultencoding('utf8') class LBTrie: """ simple implemention of Trie in Python. """ def __ini原创 2017-01-15 14:56:55 · 2467 阅读 · 0 评论 -
最小圆覆盖问题
最小圆覆盖问题-一个很经典的问题。 题目大概是,平面上n个点,求一个半径最小的圆,能够覆盖所有的点。 首先,我们可以从一个空集R开始,不断把平面上的点加入到R中,同时维护R的外接圆最小,就可以得到一个简单的解法。 另外一种想法是,先任意选取两个点,以这两个点的连线为直径作圆。再以此判断剩余的点,看它们是否都在圆内(或圆上),如果都在,说明这个圆已经找到。如果没有都在:假设我们用的最开始的两个...原创 2018-05-07 16:07:00 · 5114 阅读 · 0 评论