精华内容
下载资源
问答
  • 发现和解决问题的步骤,以便于你以后再遇到问题时可以冷静思考哟!
  • 动态规划(英语:Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划常常适用于有重叠子...

    动态规划(英语:Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。
    动态规划常常适用于有重叠子问题最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。
    动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。动态规划往往用于优化递归问题,例如斐波那契数列,如果运用递归的方式来求解会重复计算很多相同的子问题,利用动态规划的思想可以减少计算量。
    通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,具有天然剪枝的功能,从而减少计算量:一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表。这种做法在重复子问题的数目关于输入的规模呈指数增长时特别有用。

    链接:https://leetcode-cn.com/tag/dynamic-programming/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    其实这个讲的不是非常准确,《算法导论》上面的例题讲解的十分清晰明白还有完整的解题思路。注意重点:

    • 动态规划法其实是对递归算法的优化,先有递归解法,再有动态规划解法。如果递归方法都想不出来还想什么动态规划。
    • 动态规划往往用来寻找最优解问题,即求最大最小值等等。

    所以说,我们求解动态规划时,可以把思路拆分成多个步骤:

    1. 递归定义最优解的值(把原问题拆分为子问题)
    2. 求得原问题的朴素递归解法
    3. 分析朴素递归解法的重叠子问题
    4. 存储重叠子问题的解法

    例题1:算法导论钢条切割:

    前两步不同题目思路差别太大不说了。(然而前两步才是最困难的毕竟万事开头难)

    分析重叠子问题非常简单,直接脑子想是不行的,这里建议画出递归树分析。(算法导论里面也有)

    利用递归树(其实是个图)可以轻松看出问题之间对应关系以及哪个子问题已经解决哪些子问题重复解决。

    4.存储重复子问题解法:

    最简单粗暴的方法当然是建立一个字典然后问题作为键答案作为值存储,但是这个不常用因为大炮打蚊子。

    这题用一个数组进行存储就可以了,事实上很多动态规划问题也都是用数组存储。

    5.第四步出来的答案属于“自顶而下”的解决方案,经过逻辑改良可以改成“自底而上”的解决方案。后者优点是代码量小变量较少便于查错与维护。

     

    例题2:https://leetcode-cn.com/problems/regular-expression-matching/

    先上朴素递归解法

    class Solution {
        public boolean isMatch(String text, String pattern) {
            if (pattern.isEmpty()) return text.isEmpty();
            boolean first_match = (!text.isEmpty() &&
                                   (pattern.charAt(0) == text.charAt(0) || pattern.charAt(0) == '.'));
    
            if (pattern.length() >= 2 && pattern.charAt(1) == '*'){
                return (isMatch(text, pattern.substring(2)) ||
                        (first_match && isMatch(text.substring(1), pattern)));
            } else {
                return first_match && isMatch(text.substring(1), pattern.substring(1));
            }
        }
    }
    
    作者:LeetCode
    链接:https://leetcode-cn.com/problems/regular-expression-matching/solution/zheng-ze-biao-da-shi-pi-pei-by-leetcode/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    对递归过程进行分析,作图(递归树一定要画的,不然纯脑子想保证一会你就晕的脑壳痛):

     即知重复运算的次数,若将这些重复运算的结果储存,则每次向下递归消费就从*2变成了+1。

    4.存储中间结果:

    此题可以使用二维数组存储中间结果,记录string和patten子字符串的开始位置。当然这种有规律的树图也可以使用一维数组进行存储来减少空间复杂度,不过需要在数据读取和索引变换上下点功夫。

    也可以自底而上进行求解,这样就可以在使用计算完上层答案之后删除下层空间复杂度更小,也避免频繁扩容数组声明变量请求内存。

     

    展开全文
  • 思考:为什么要开展数据分析,通过这次数据分析要解决什么问题? 当明确目的后,就要校理分析思路,并搭建分析框架,把分析目的分解成若干个不同的分析要点,即如何具体开展数据分析,需要从哪几个角度进行分析,...

    典型的大数据分析包含以下几个步骤:     

     

    图片

    1    明确分析目的和思路

    明确数据分析目的以及确定分析思路,是确保数据分析过程有效进行的先决条件,它可以为数据的收集、处理及分析提供清晰的指引方向。

    目的是整个分析流程的起点。目的不明确则会导致方向性的错误。即思考:为什么要开展数据分析,通过这次数据分析要解决什么问题?

    当明确目的后,就要校理分析思路,并搭建分析框架,把分析目的分解成若干个不同的分析要点,即如何具体开展数据分析,需要从哪几个角度进行分析,采用哪些分析指标。只有明确了分析目的,分析框架才能跟着确定下来,最后还要确保分析框架的体系化,使分析更具有说服力。

    图片

    要想使分析框架体系化,就需要一些营销、管理等理论为指导,结合着实际的业务情况进行构建,这样才能保证分析维度的完整性,分析结果的有效性以及正确性。比如以用户行为理论为指导,搭建的互联网网站分析指标框架如下:

    图片

    把跟数据分析相关的营销、管理等理论统称为数据分析方法论。比如用户行为理论、PEST分析法、5W2H分析法等等,详细请查阅附件资料。

    2    数据收集

    数据收集是按照确定的数据分析框架,收集相关数据的过程,它为数据分析提供了素材和依据。这里所说的数据包括第一手数据与第二手数据,第一手数据主要指可直接获取的数据,第二手数据主要指经过加工整理后得到的数据。一般数据来源主要有以下几种方式:

    数据库:每个公司都有自己的业务数据库,存放从公司成立以来产生的相关业务数据。这个业务数据库就是一个庞大的数据资源,需要有效地利用起来。

    公开出版物:可以用于收集数据的公开出版物包括《中国统计年鉴》《中国社会统计年鉴》《中国人口统计年鉴》《世界经济年鉴》《世界发展报告》等统计年鉴或报告。

    互联网:随着互联网的发展,网络上发布的数据越来越多,特别是搜索引擎可以帮助我们快速找到所需要的数据,例如国家及地方统计局网站、行业组织网站、政府机构网站、传播媒体网站、大型综合门户网站等上面都可能有我们需要的数据。

    市场调查:进行数据分析时,需要了解用户的想法与需求,但是通过以上三种方式获得此类数据会比较困难,因此可以尝试使用市场调查的方法收集用户的想法和需求数据。

    3    数据处理

    数据处理是指对收集到的数据进行加工整理,形成适合数据分析的样式,它是数据分析前必不可少的阶段。数据处理的基本目的是从大量的、杂乱无章、难以理解的数据中,抽取并推导出对解决问题有价值、有意义的数据。

    数据处理主要包括数据清洗、数据转化、数据提取、数据计算等处理方法。一般拿到手的数据都需要进行一定的处理才能用于后续的数据分析工作,即使再“干净”’的原始数据也需要先进行一定的处理才能使用。

    数据处理是数据分析的基础。通过数据处理,将收集到的原始数据转换为可以分析的形式,并且保证数据的一致性和有效性。

    图片

    4    数据分析

    数据分析是指用适当的分析方法及工具,对处理过的数据进行分析,提取有价值的信息,形成有效结论的过程。由于数据分析多是通过软件来完成的,这就要求数据分析师不仅要掌握各种数据分析方法,还要熟悉数据分析软件的操作。

    数据挖掘其实是一种高级的数据分析方法,就是从大量的数据中挖掘出有用的信息,它是根据用户的特定要求,从浩如烟海的数据中找出所需的信息,以满足用户的特定需求。数据挖掘技术是人们长期对数据库技术进行研究和开发的结果。一般来说,数据挖掘侧重解决四类数据分析问题:分类、聚类、关联和预测,重点在寻找模式和规律。数据分析与数据挖掘的本质是一样的,都是从数据里面发现关于业务的知识。

    5    数据展现

    图片

    一般情况下,数据是通过表格和图形的方式来呈现的,我们常说用图表说话就是这个意思。常用的数据图表包括饼图、柱形图、条形图、折线图、散点图、雷达图等,当然可以对这些图表进一步整理加工,使之变为我们所需要的图形,例如金字塔图、矩阵图、漏斗图等。

    大多数情况下,人们更愿意接受图形这种数据展现方式,因为它能更加有效、直观地传递出分析所要表达的观点。记位,一般情况不,能用图说明问题的就不用表格,能用表格说明问题的就不要用文字。

    6    报告撰写

    数据分析报告其实是对整个数据分析过程的一个总结与呈现。通过报告,把数据分析的起因、过程、结果及建议完整地呈现出来,供决策者参考。

    最后,好的分析报告一定要有建议或解决方案。作为决策者,需要的不仅仅是找出问题,更重要的是建议或解决方案,以便他们做决策时作参考。所以,数据分析师不仅需要掌握数据分析方法,而且还要了解和熟悉业务,这样才能根据发现的业务问题,提出具有可行性的建议或解决方案。

    展开全文
  • 给定不同面值硬币coins和一个总金额amount,编写...确定状态需要通过两个思考:最后一步和子问题,找出原问题和子问题中变化变量,这个变量就是要确定状态。 最后一步 例如凑硬币问题中,可选硬币金额是2,5,7,

    给定不同面值的硬币coins和一个总金额amount,编写一个函数来计算可以凑成总金额所需的最小硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。

    首先根据最小两个字,还有每一次选择之后,都会有不同的选择路径,可以分析是用动态规划来进行解题,那么就开始按照动态规划的解题要素开始解题。

    确定状态

    解题的前提就是确定题中的状态是什么,一般情况下,动态规划需要开一个数组,数据的每个元素f(i)或者f(i)(j)代表的就是状态。

    确定状态需要通过两个思考:最后一步和子问题,找出原问题和子问题中变化的变量,这个变量就是要确定的状态。

    最后一步

    例如凑硬币问题中,假设可选硬币金额是2,5,7,总金额是27,那么最优策略是从2、5、7面值中选K枚加起来是27,这个操作的最后一步是什么呢?

    最后一步是从2,5,7当中选择一个金额填充进去

    假设最后一步凑的硬币是金额是ak,那么前面就是27-ak
    在这里插入图片描述

    子问题

    根据最后一步的过程,我们发现题意转变为如何用k-1枚硬币拼出27-ak这个的规模变小了、但问题一样的子问题。

    其中有两个变量:金额和硬币数 ,随着硬币数的减少,金额随之变小,因此原问题和子问题中的变量就是金额。

    要确定的状态就是f(X)=最少用多少枚硬币拼出X。X为金额大小。

    转移方程

    推导过程如下:

    假设硬币只有2、5、7这三个金额,

    • 假设ak是2 ,f(27)=f(27-2)+1;
    • 假设ak是5 ,f(27)=f(27-5)+1;
    • 假设ak是7 ,f(27)=f(27-7)+1;

    求最小的硬币数,即

    f(27)=min{f(27-2)+1,f(27-5)+1,f(27-7)+1}
    

    由于状态f(x)=最少用多少枚硬币拼出X。

    所以抽象化转移方程为

    f(x)=min{f(x-2)+1,f(x-5)+1,f(x-7)+1}
    

    初始条件和边界情况

    以状态转移方程 f(x)=min{f(x-2)+1,f(x-5)+1,f(x-7)+1} 分析

    • 初始条件:是因为这些值通过状态方程算不出来,所以定义:f(0)=0;
    • 边界条件:就是不能出现越界行为
      • x-2、x-5、x-7不能小于0
      • 假如不能拼出金额x,则定义f(x)=正无穷。
    • 终止条件:计算出f(x)

    计算顺序

    一般的计算顺序是从小到大,从左到右,从上到下。主要还是看动态方程,计算过程中依赖的子问题首先需要先解决,所以子问题决定了计算顺序。

    例如: f(x)=min{f(x-2)+1,f(x-5)+1,f(x-7)+1} 中,f(x) 依赖于 f(x-2)、f(x-5)、f(x-7) 小的子问题,所以应该从小到大开始计算。

    示例代码

    public class Solution {
    
        public int coinChange(int[] coins, int amount) {
    
            int f[] = new int[amount + 1];
            int n = coins.length;
            f[0] = 0;
            for (int i = 1; i <= amount; i++) {
    
                f[i] = Integer.MAX_VALUE;
    
                for (int j = 0; j < n; j++) {
    				// f[i - coins[j]] != Integer.MAX_VALUE 防止溢出
                    if (i >= coins[j] && f[i - coins[j]] != Integer.MAX_VALUE) {
                        f[i] = Math.min(f[i - coins[j]] + 1, f[i]);
                    }
    
                }
    
            }
            if (f[amount] == Integer.MAX_VALUE) {
                return -1;
            }
            return f[amount];
    
        }
    }
    

    总结

    在凑硬币问题中,需要通过最后一步,选取可选硬币中的一个,接着看出子问题,再通过子问题确定状态,写出状态转移方程,最终确定初始条件和边界条件,后续计算顺序,因为前面初始条件有了,所以后续的计算顺序基本也就确定了。

    展开全文
  • 数据分析,应该多思考业务实际情况,对数据指标进行解读,从而把有价值信息提炼出来,解决业务实际问题。这个过程虽然看起来挺简单,但是却需要反复、长期「刻意练习」才能...
        

    数据分析,应该多思考业务的实际情况,对数据指标进行解读,从而把有价值的信息提炼出来,解决业务的实际问题。

    这个过程虽然看起来挺简单的,但是却需要反复、长期的「刻意练习」才能逐渐熟练掌握。

    刻意练习指的是有目的的训练,是一种不断改进的做法,是一个不断积累的过程,积跬步以致千里。刻意练习的过程必须专注,需要认真地去思考,并且及时验证和反馈。

    比如,数据分析思路的训练,首先应该专注于解决问题,其次要去思考问题到底是什么,然后用数据进行验证,搞清楚问题的真正原因,从而提出解决方案的建议,最后付诸行动,并跟踪反馈行动的效果。

    在现实的工作和生活环境中,数据指标发生变化是一件很常见的事,而分析数据指标,应该是数据分析师的看家本领。那么具体应该如何分析数据指标的变化呢?可以参考下面数据分析的思路。

    1. 确认数据源是否正确?

    如果数据源本身不对,那么应该尽快修正数据。实际上,因为数据源不对,导致数据指标异常变化的情况非常多,一定要先确认数据没有错,不要报假警。确认数据正确无误后,接下来才开始进行数据分析。

    2. 判断数据变化的程度如何?

    这是确认问题的轻重。常见的指标,比如销售额,其波动是有一定范围的,根据历史经验,可以预设好变化的预期值。如果是轻微的变化,在正常的波动范围之内,那么通常可以不用深入分析。假如数据变化比较大,超出我们的预期,那么需要做进一步的分析。对于数据严重超标的情况,需要重点跟进分析。

    3. 数据变化的周期如何?

    如果是一次性的变化,那么分析看看是否有持续的迹象?如果是周期性的变化,那么分析看看是否符合周期性的规律?与上一个周期的数据进行对比,分析判断数据变化的趋势。比如二月份销售下降,看看是不是有春节的影响?去年的春节是不是也发生在二月份?和去年同期相比的,销售是上升还是下降?

    4. 数据变化的前后发生了什么事件?

    单纯地看整体的数据,往往很难搞清楚数据变化的真实原因,但是当我们缩小范围,运用假设检验的思维方式,把数据变化和相关事件联系起来,大胆假设,小心求证,进行深入的分析,就更容易找到问题的根源。所以,熟悉业务和行业知识很重要。

    事件可以细分为外部事件和内部事件,外部宏观层面的事件通常采用 PEST 分析模型,其中 P 是政治(Politics),E 是经济(Economy),S 是社会(Society),T 是技术(Technology)。政治的影响可能是致命的,有可能让行业面临灭顶之灾,其他的影响更多是渐进式的。内部事件可能在短期内对快速改变数据指标,比如当绩效考核方案发生重大调整时,KPI 指标可能很快就会发生变化。一般数据分析的原则是:剧烈变化看政策,短期波动找内因,长期异动找外因。

    5. 数据变化的细分纬度有哪些?

    对于一般的商品销售业务来讲,通常包括「人、货、场」三个细分纬度,其中「人」包括员工和客户,「货」主要是指销售的商品,「场」是指销售的场景,比如线下的门店、线上的网店。

    比如某天整体销售额上涨了20%,是哪些员工、哪些客户、哪些商品、哪些渠道在上涨?上涨的主要原因有哪些?把表现比较好的标出来,总结成功的经验,其他表现不佳的可以学习,未来寻找解决方案时也可以参考借鉴。

    总结

    数据变化是很正常的现象,发现数据指标的变化以后,首先要确认数据本身的正确性,然后再去分析数据变化的程度、周期、相关事件、细分纬度等情况。

    不断刻意练习这个过程,数据分析的思路就会逐渐打开,很多问题其实也就能迎刃而解了。

    如果能在数据分析这个细分领域成为专家,把每一个环节做到极致,帮助别人解决实际问题,并用心做好传播工作,把经验和技能传承下去,让自己的工作价值放大,实现利他和利己的双赢,将来回首自己的生涯,也许感觉会很不一样。

    640?wx_fmt=png

    END

    转自: 林骥 公众号;作者:林骥

    版权声明:本号内容部分来自互联网,转载请注明原文链接和作者,如有侵权或出处有误请和我们联系。

    商务合作|约稿 请加qq:365242293  


    更多相关知识请回复:“ 月光宝盒 ”;

    数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。

    640?wx_fmt=png

    展开全文
  • 算法分析一般步骤

    千次阅读 2019-02-25 10:50:05
    很多程序员都爱犯一个毛病,就是刚开始动手...1)先分析问题,找到一个可行方案 2)将方案落地 3)思考当问题规模增大一个量级(10倍)时,这套方案能在可接受时间内给出问题答案吗 4)如果随着问题规模不断增...
  • 数据分析基本步骤(瞎写~~)

    千次阅读 2018-03-05 17:19:40
    3.1. 明确分析目的和思路 明确分析目的和思路 明确数据分析目的以及定思路,是保过程有效进行先决 明确数据分析目的...即思考思考 :为什么要开展数据分析 ,通过这次要解决什么问题? 当目的明确 后, 就要校...
  • 思考和建议我们日常接触到研究,有大量基于野外采样内容。在这些基于野外采样研究中,空间自相关是一个无法回避的问题。自相关(Autocorrelation)指是比较对于同一个观察对象相近观察之间相关性。常见自...
  • 对于要进行分析的模式集合,执行步骤2a-ad.  2a.按背景创造顺序将模式排序.根据为其它模式创造背景情况将模式排序.其原理是,一个模式将为另一个模式创造背景,不会出现两个模式互为彼此创造背景情况.  2b.选择...
  • 在面临这些复杂问题时,尤其当问题又很紧急时,有人完全没有头绪,不知道从哪里下手,而有人思路清晰,分析问题有条有理,行动步骤清晰明确。为什么会产生这样差距? 我认为思路清晰人掌握了一套方法论,这种...
  • 算法: 算法是解决问题的方法或过程,它包括一系列步骤,用来将输入数据转换成输出结果。 算法描述的形式: 自然语言,流程图,伪代码 用伪代码描述有哪些优势? 答:易于转化代码,容易修改,简单易懂 算法具有的...
  • 之前带过研究生很多都存在读文献严重误区:从头读到尾恨不得嚼透每个...在开始读文献之前大家不妨思考几个很关键的问题:1. 如何判断手头这篇文献和自己领域相关值得精度? 2. 那些在阅读中遇到生单词 (...
  • 本文就来探讨DDD落地时需要关注六个问题,并通过一个足球运动员信息管理系统案例分析落地六个步骤。 1 六个问题 1.1 为什么使用 DDD方法论核心是将问题不断分解,把大问题分解为小问题,大业务分解小领域,...
  • 这项开发研究旨在实现基于问题的学习的教材的开发,从而了解PBL教材对提高小学四年级学生的高思维能力的实用性和有效性。 使用的研究方法是按照Borg和Gall的研究步骤进行研究开发(开发和开发)。 该研究的人口是...
  • 步骤一:日志分析 1、堆溢出 主要方向看对象或流close 2、栈溢出 主要看for遍历代码逻辑是否不严谨 先集中解决业务代码上这些报错,代码里不优秀做法,比如流是否close,是不是发生了死循环。 步骤二...
  • 一般出了问题,解决办法:检查能否自发自收,如果不行,多换几个串口...我觉得这是解决问题的通用办法,先思考下问题现象,然后分析归纳,然后判断可能出现问题的地方,然后排除法定位问题的原因,最后找出解决办法...
  • 数据分析的步骤如上图所示:转载知乎@Cindy数据分析的步骤分为5步:1.提出问题,2.理解数据,3.数据清洗,4.构建模型,5.数据可视化1.1 提出问题在数据分析之前要明确分析问题,明确分析的目的是什么,思考从当前...
  • 何谓问题 问题类型 界定问题步骤 原因分析工具 思考与选择对策方案 风险管理 ;何谓问题 ;问题类型;问题像冰山;原因;界定问题步骤;界定问题衡量;描述问题describe the problem;好的问题描述要素包括;不正确...
  • 第一章如何用计算机解决问题 @ 1.1计算机解决间题的过程 遝题引入:解方程试题 6x2+5-50=0 @ 二人解决问题的一般过程 观察分析问题 收集必要的信息 判断推理 根据已有的 知识经验 解决问题 按照一定的 方油和步骠 @ ...
  • 当我们遇到数据库调优的问题,该如何思考呢?下面分享一张思考的流程图: 将整个流程划分成观察(Show status)和行动(Action)两个部分。其中字母S部分代表观察(会使用相应的分析工具),字母A代表部分是行动...
  • 先不论这事所造成的吃瓜效应,这个问题的核心根源还是决策者想对老品牌进行创新,以获得更多市场和关注度,结束代言只是其中一个步骤而已。 一、创新并不是大品牌的独角戏 从这个案例可以看到,连大品牌都面临市场...
  • 文章目录一、前言二、RPC 基础概念1. RPC 是什么?2. 需要解决什么问题?3. 有哪些开源实现?三、protobuf 基本使用1.... 未解决的问题 一、前言 在嵌入式系统中,很少需要使用到 RPC (Remote Proce
  • 工作就是不断发现问题、分析问题、最终解决问题的过程,晋升之门将永远为那些随时解决问题的人敞开着! 明白程序的架构、接口、参数、共享、安全、效率、交互等与程序密切相关的问题! !(黑木耳,苦瓜,
  • 思考的技术

    2020-05-04 11:47:40
    给老板提建议的思考路径可以参考麦肯锡给企业提案: 提案: 1:确定问题 2:业界动向 3:其他公司动向 4:现状分析 5:改善条件 6:解决方案 7:给唯一建议 8:计划和步骤 打动人心要点 1:...
  • 最后,反而被为抽象出来一个解决问题的思路。 任何事情,均可以通过 第一种。“纸和笔”,写下来每一步来思考,再优的方案(即使是在程序级别) 第二种。通过电脑的记事本,写下每一步,然后再分析。 ...
  • 一、问题描述二、分析步骤2.1 查看日志2.2 修改Solr硬提交2.3 寻求StackOverFlow帮助2.4 修改了read-row="never"后,丢失部分字段2.5 修改代码2.6 重新打包分发三、结果四、思考 一、问题描述 部分业务需要...
  • 一个程序设计步骤

    千次阅读 2017-10-24 14:37:29
    本文为原创博客,仅供技术学习使用。未经允许,禁止将其复制下来上传到百度文库等平台。如有转载请注明本文博客地址(链接)。...思考其他可能适合算法及数据结构,最后再选出最适当目标。 步骤4:编

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 702
精华内容 280
关键字:

思考分析问题的步骤