精华内容
下载资源
问答
  • 同样的程序每次运行的时间不一样

    千次阅读 2017-08-04 14:08:42
    最近在MFC开发过程中,遇到一个问题,即运行一段程序需要对其进行计时,不能保证每个同时开始的程序或者说是每个同时开始的线程同时结束。测试的时候,为了找到原因,我让线程上跑的程序时间复杂度都保持一致,且未...

            最近在MFC开发过程中,遇到一个问题,即运行一段程序需要对其进行计时,不能保证每个同时开始的程序或者说是每个同时开始的线程同时结束。测试的时候,为了找到原因,我让线程上跑的程序时间复杂度都保持一致,且未设置优先级,然而同时开始却依旧不能同时结束,或者说差距比较小的同时结束。最后我尝试了一种更加极端的测试,即同一段程序让其运行,看看运行时间是否一致,为了保证测试的精度,我定时器选择的是QueryPerformanceCounter,其精确度可以达到纳秒级的。测试的结果还是和原来一样,每次运行的时间不同且波动很大。

           于是我尝试在网上找到原因这个贴子,在测试一段代码运行时间,每次不一样,求问原因这个帖子里面我找了一个很可信的原因:

                            1、与操作系统的调度有关

                            2、现在的CPU支持动态调频

    展开全文
  • 多分类问题距离判别原程序: distinguish.distance (TrnX, TrnG, TstX = NULL, var.equal = FALSE){ if ( is.factor(TrnG) == FALSE){ mx(TrnX); mg(TrnG) TrnX(TrnX, TrnG) TrnG(rep(1:2, c(mx, mg)...
  •  比如:同样的attr_thread这个程序:  ubuntu中运行后,通过ps -aux只能看到一个进程在运行  目标板中运行后,通过ps 能看到4个进程在运行,但运行的程序名字是一致的 原因:  ubuntu中使用NPTL线程库,目标
     
    

    1. 同一多线程程序,经过编译和交叉编译后,在ubuntu和在我们的ARM板的嵌入式LINUX中运行时候,通过ps 看到的信息不一致:
       比如:同样的attr_thread这个程序:
       ubuntu中运行后,通过ps -aux只能看到一个进程在运行
       目标板中运行后,通过ps 能看到4个进程在运行,但运行的程序名字是一致的

    原因:
       ubuntu中使用NPTL线程库,目标板中使用linuxthreads线程库
      
       NPTL从一个进程中所有的线程中运行getpid()获取到得PID值相同
       而linuxthreads每个线程使用不同的PID,从一个进程中不同线程中运行getpid()获取到得PID值不相同

    2. 确认系统中线程库是那一种的方法:

       查看方法可以通过运行/lib/libc.so.6 可看到:
     
    ubuntu中如下:
      shyi@ubuntu:~/labs/1106/labs/threads$ /lib/libc.so.6
    GNU C Library (Ubuntu EGLIBC 2.12.1-0ubuntu6) stable release version 2.12.1, by Roland McGrath et al.
    Copyright (C) 2010 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.
    There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
    PARTICULAR PURPOSE.
    Compiled by GNU CC version 4.4.5 20100909 (prerelease).
    Compiled on a Linux 2.6.35 system on 2010-09-10.
    Available extensions:
            crypt add-on version 2.1 by Michael Glad and others
            GNU Libidn by Simon Josefsson
            Native POSIX Threads Library by Ulrich Drepper et al  (这一行是重点,表示这是NPTL)
            BIND-8.2.3-T5B
    libc ABIs: UNIQUE IFUNC
    For bug reporting instructions, please see:
    <http://www.debian.org/Bugs/>.


    目标板上:
    # /lib/libc.so.6
    GNU C Library stable release version 2.3.6, by Roland McGrath et al.
    Copyright (C) 2005 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.
    There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
    PARTICULAR PURPOSE.
    Compiled by GNU CC version 3.4.5.
    Compiled on a Linux 2.6.12 system on 2008-09-10.
    Available extensions:

            GNU libio by Per Bothner
            crypt add-on version 2.1 by Michael Glad and others
            linuxthreads-0.10 by Xavier Leroy  (这一行是重点,表示这是linuxthreads)                   
            BIND-8.2.3-T5B
            libthread_db work sponsored by Alpha Processor Inc
            NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/libc/bugs.html>.  

    展开全文
  • i5上面0.15s数量级 i7上面居然是0.47s 主频就差了0.6 g,速度回差别这么多么? 我用都是release win32 visual studio 2010,系统都是win10 64位 没理由啊,i7比i5贵那么多呢。。。
  • 不知道大家有没有经常遇到这样的一个困扰,为什么同样的算法,你的程序却一直超时?大家用的都是暴力大法,为什么别人的能过所有数据,而你的却只能过前几个样例;同样都是使用dp,为什么你的比别人的慢了那么多,有...

    为什么同样的算法,你的程序却一直超时? 算法竞赛你不得不知道的小技巧

      大家好,我是亓官劼(qí guān jié ),在【亓官劼】公众号、CSDN、GitHub、B站、华为开发者论坛等平台分享一些技术博文,主要包括前端开发、python后端开发、小程序开发、数据结构与算法、docker、Linux常用运维、NLP等相关技术博文,时光荏苒,未来可期,加油~
      如果喜欢博主的文章可以关注博主的个人公众号【亓官劼】(qí guān jié),里面的文章更全更新更快。如果有需要找博主的话可以在公众号后台留言,我会尽快回复消息,其他平台私信回复较慢。
    在这里插入图片描述

    由于学习工作的需要,算法刷题将会逐渐由C++向Python3过度,正在过度中,如实现的不太优美,请见谅。

    本文原创为【亓官劼】(qí guān jié ),请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 全部文章请关注微信公众号【亓官劼】。


      不知道大家有没有经常遇到这样的一个困扰,为什么同样的算法,你的程序却一直超时?大家用的都是暴力大法,为什么别人的能过所有数据,而你的却只能过前几个样例;同样都是使用dp,为什么你的比别人的慢了那么多,有时候最后一个测试点都超时!
      虽然大家用的都是同样的思想,同样的算法,但是如果你在算法比赛在不注意这些小细节的话,将会大大的增加你程序的执行时间,增加甚至是将你算法程序的时间复杂度提升一个量级!下面博主整理了一些算法比赛中十分常用的一些小细节,快看看你有没有中招!

    1. 在for循环的判断条件中使用求长度/大小的函数

      很多小伙伴们在写for()循环的时候,喜欢在判断条件,但是这种方法看似让你省写了一个length变量,但是却让你的程序慢了许多。例如我们以下面两段程序为例:
    第一段:

    #include <iostream>
    #include <ctime>
    #include <vector>
    using namespace std;
    
    int main(){
        vector<int> demo;
        for (int i = 0; i < 100000; ++i) {
            demo.push_back(i);
        }
        int length = demo.size();
        clock_t startTime = clock();
        for (int i = 0; i < length; ++i) {
            demo[i]++;
        }
        clock_t endTime = clock();
        cout<<"执行用时: "<<(endTime - startTime)<<endl;
        return 0;
    }
    
    #include <iostream>
    #include <ctime>
    #include <vector>
    using namespace std;
    
    int main(){
        vector<int> demo;
        for (int i = 0; i < 100000; ++i) {
            demo.push_back(i);
        }
        clock_t startTime = clock();
        for (int i = 0; i < demo.size(); ++i) {
            demo[i]++;
        }
        clock_t endTime = clock();
        cout<<"执行用时: "<<(endTime - startTime)<<endl;
        return 0;
    }
    

      这里面第一段程序运行输出的是执行用时: 278,第二段程序运行的输出为执行用时: 401,大家看一下这两段程序,虽然第一段程序多写了一行,使用了一个变量length,但是第一段程序却要比第二段程序的效率要高得多(这里提高了30%+的效率),有时候并不是说程序短,执行效率就高

    2.复杂的式子多次使用,赋值给变量

      这个情况也很常见了,在我们很多时候,可能一个复杂的计算我们需要进行多次的判断,赋值等操作,这个时候一定不要舍不得声明一个新变量将它赋值,用变量来代替重复的计算。例如下面的代码:
      本文原创为CSDN博主亓官劼,原文链接为:为什么同样的算法,你的程序却一直超时? 算法竞赛你不得不知道的小技巧,请大家支持原创,拒绝抄袭。

    if(min(max_right[i],max_left[i]) - height[i] > 0)
    	ans = ans + min(max_right[i],max_left[i]) - height[i];
    

    我们可以优化为:

    int temp = min(max_right[i],max_left[i]) - height[i];
    ans += temp > 0 ? temp : 0;
    

    程序段的意思不变,但是执行想效率却要高了很多,尤其是在多次使用的时候。

    3.判断奇偶数的时候,使用’&'更高效

      在判断一个数的奇数还是偶数的时候,很多小伙伴会使用%来求一个数除以2的余数来进行判断,其实这里我们有更高效的方法,那就是&与运算,如果a&1 == 1则a为奇数,a&1 == 0则a为偶数。

    4.能转换为迭代的函数,尽量不要写递归

      很多小伙伴们习惯写递归函数,确实递归函数比较好构思,好写出程序出来,但是递归函数的时间复杂度和空间复杂度是非常大的,非常容易超时,如果我们有时间并且有能力将它转换为迭代的话,我们还是使用迭代会比较好,时间和空间上会节省很多。
      本文原创为CSDN博主亓官劼,原文链接为:为什么同样的算法,你的程序却一直超时? 算法竞赛你不得不知道的小技巧,请大家支持原创,拒绝抄袭。

    5.学会以空间换时间

      在算法竞赛中,我们一般会经常超出时间限制,但是超出空间限制的还是很少的,一般比赛给的都是16MB甚至256MB,根本用不完啊,而且多开几个数组也完全的占不了几个字节,但是这能让我们的程序节省上百倍的时间。这里就拿昨天写的一题来举例吧:LeetCode 每日一题 42. 接雨水,原文有具体的题目和代码,这里为了方便,我们把两段代码分别拿过来。
    第一段代码,完全暴力:

    class Solution {
    public:
        int trap(vector<int>& height) {
            int ans = 0;
            int length = height.size();
            int max_left,max_right;
            for(int i = 0; i< length; i++){
                max_left = max_right = 0;
                //找到左面的最高值
                for(int j = i; j >= 0; j--){
                    if(height[j] > max_left)
                        max_left = height[j];
                }
                //找到右面的最高值
                for(int j = i; j < length; j++){
                    if(height[j] > max_right)
                        max_right = height[j];
                }
                // 当前柱面能够接的雨水为:左右两名最高值的低值,然后减去当前柱面的高度
                ans += min(max_right,max_left) - height[i];
            }
            return ans;
        }
    };
    

    第二段程序,在第一段的基础上使用了打表:

    class Solution {
    public:
        int trap(vector<int>& height) {
            int ans = 0;
            int length = height.size();
            //空vector时直接返回0
            if(length == 0)
                return 0;
            int max_left[length],max_right[length];
            //i = 0时,左面(含当前)最大值为height[0]
            max_left[0] = height[0];
            for(int i = 1; i < length; i++){
                //max_left[i] 赋值为当前柱面的高度和max_left[i-1]最大值
                max_left[i] = max(height[i],max_left[i-1]);
            }
            //i = length -1 时,右面(含当前)最大值为height[length-1]
            max_right[length-1] = height[length-1];
            for(int i = length-2; i >= 0; i--){
                //max_right[i]赋值为当前柱面的值和max_right[i+1]的最大值
                max_right[i] = max(height[i],max_right[i+1]);
            }
            for(int i = 0; i< length; i++){
                // 当前柱面能够接的雨水为:左右两面最高值的低值,然后减去当前柱面的高度,赋值为temp
                int temp = min(max_right[i],max_left[i]) - height[i];
                // 如果temp>0,则ans进行累加,否则加0
                ans += temp > 0 ? temp : 0;
            }
            return ans;
        }
    };
    

    然后我们这里再分别贴一下两端程序执行分别使用的时间,第一段程序使用了416ms:
    在这里插入图片描述
    第二段程序使用了4ms:
    在这里插入图片描述
      第一段程序使用的时间是第二段程序的104倍,第二段程序使用的内存竟然还比第一段程序少了0.1MB,但是我们仔细看看两段程序的区别,我们的第二段程序仅仅是将第一段程序中每次遍历当前柱面是左右寻找的最高值,在一程序开始时使用一个数组记录下来,避免了后面的重复计算。仅仅是这2个小小的数组,就将这端程序的效率提高了104倍,这里明明是使用空间换时间,结果第二段程序使用的空间反而更小,这就是这么神奇!
      本文原创为CSDN博主亓官劼,原文链接为:为什么同样的算法,你的程序却一直超时? 算法竞赛你不得不知道的小技巧,请大家支持原创,拒绝抄袭。

    6.算法最高不要超过O(n^2)

      在我们正常的算法竞赛中,当你写出来一个时间复杂度比O(n2)的算法时,那你这题基本是凉透了,或者说你只想拿前两个样例(`这里说一句,按测试点的比赛,如果实在想不出来,最后可以写个完全暴力,能骗几分是几分`)。我们一般来说,时间效率到O(n 2)一般都很高了,已经很难过全部样例了,如果是压轴题的话,O(n)算法都比较难过全部样例,得需要优化到O(lgn)才保险。所以我们一般在写的时候就要注意我们的一个大致的时间复杂度,别让自己绞尽脑汁写出来的程序,结果到最后只过了前面的几个样例,我尽可能的降低时间复杂度,上面提供了5中常用的降低时间的小技巧,大家可以进行参考。一般来说O(n)的算法还是比较好写出来的,在训练的时候,自己写出来了也要多看看各个大神的解法,说不定会给你新的解题思路。


    好了,本期就到这里,大家还有什么其他的小技巧也可以在评论区分享哦~

      大家好,我是亓官劼(qí guān jié ),在【亓官劼】公众号、CSDN、GitHub、B站、华为开发者论坛等平台分享一些技术博文,主要包括前端开发、python后端开发、小程序开发、数据结构与算法、docker、Linux常用运维、NLP等相关技术博文,时光荏苒,未来可期,加油~
      如果喜欢博主的文章可以关注博主的个人公众号【亓官劼】(qí guān jié),里面的文章更全更新更快。如果有需要找博主的话可以在公众号后台留言,我会尽快回复消息,其他平台私信回复较慢。
    在这里插入图片描述

    由于学习工作的需要,算法刷题将会逐渐由C++向Python3过度,正在过度中,如实现的不太优美,请见谅。

    本文原创为【亓官劼】(qí guān jié ),请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 全部文章请关注微信公众号【亓官劼】。

    展开全文
  • 同样在eclipse中运行也是正常无误: ![图片说明](https://img-ask.csdn.net/upload/201504/23/1429795839_866072.jpg) 从图中也可以看到shell和命令行中python都是2.7.9版本,eclipsepython版本是2.7.3...
  • 让 VB6 开发的程序拥有视觉样式( XP 风格),VC++6.0 同样适用。  相信用 VB6 或 VC6 开发过程序的朋友都曾郁闷过吧,VB6 或 VC6 做的程序都没有视觉样式(XP风格),毕竟是 98 年的产品了!很老了。笔者也因此...

    原文地址:http://hi.baidu.com/hammerc/item/ed1e32ec6090e3d0ea34c9ad

        相信用 VB6 或 VC6 开发过程序的朋友都曾郁闷过吧,VB6 或 VC6 做的程序都没有视觉样式(XP风格),毕竟是 98 年的产品了!很老了。笔者也因此改用 VB2005,可以直接编写出拥有视觉样式(XP风格)的程序。但是 VB2005 编写的小程序占用近 10MB 的内存不说,还得事先安装 .NET Framework2.0 才能运行。当然最后把我逼疯的是它开发的程序第一次运行需要等上 5 秒多钟!最后笔者重操旧业,又用起了 VB6 和 VC6。


        上图为 VB6 开发的一个程序。纵观整个程序,也只有 text 和 list 两个控件里的滚动条启用了视觉样式(XP风格)。

        通过最近在网上搜索的资料和自己的摸索,笔者总结了三个方法让 VB6 或 VC6 开发的程序拥有视觉样式( XP 风格):

    ●方法一:使用 Manifest 文件。

        在你的程序所在目录下新建一个文本文件,打开后写入下列代码:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
       version="1.0.0.0"
       processorArchitecture="X86"
       name="vbAccelerator.XPStylesTester.XPStylesTester"
       type="win32"
    />
    <description>VB code converter.</description>
    <dependency>
       <dependentAssembly>
        <assemblyIdentity
         type="win32"
         name="Microsoft.Windows.Common-Controls"
         version="6.0.0.0"
         processorArchitecture="X86"
         publicKeyToken="6595b64144ccf1df"
         language="*"
        />
       </dependentAssembly>
    </dependency>
    </assembly>

        保存后将文本文件名改为 程序名加上.exe.Manifest 。比如上图的程序名为 工程1.exe ,就将文本文件名改为 工程1.exe.Manifest 。接下来运行程序看看。哈哈,成功了!


        缺点,文件分离且要改名,麻烦。而且相信大家也发现了(只是 VB6 开发的程序会出现这个问题),一些控件在Frame控件内显示会发生错误,解决方法是在Frame控件内拖入一个PictureBox控件,并将显示风格BorderStyle设置为0-None。而且CommandButton、CheckBox、OptionButton控件将不会显示自定义颜色。还有Common Controls 5.0控件可以使用XP样式,Common Controls 6.0控件不行。

    ●方法二:将信息嵌入程序的资源文件中。

        这是最搞笑也是最麻烦的做法而且只适用于 VB6,所以我没做过,就把别人的方法直接写下来了哈。

    在第一个加载的窗体中声明和引用下面这个API过程。

    Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
    Private Sub Form_Initialize()
    InitCommonControls
    End Sub

    这样就可以调用XP风格了。打开资源文件管理器,不过我还是建议你使用第三方的RES资源管理器。打开我们刚才的文件,将其资源ID号更改为24,将文件号更改为1,编译程序,完成!

    ●方法三:使用eXeScope。

        这是我无意间发现的,而且效果很好,即简单又能弥补方法一的缺点。这种方法要用到eXeScope这个软件,可以去网上下载,这儿我提供一个下载地址:www.duote.com/soft/3533.html。安装好eXeScope后,打开eXeScope,选择文件->打开,打开你的程序。这儿先做好你的程序的备份哦。打开后,再选择编辑->XP样式,在对话框中确定。退出eXeScope。

        运行程序看看,不用我多说了吧,呵呵

    展开全文
  • 代码 public class Test{ public static void main(String args[]){ String a="b"; for(int i=0;i;i++){ a=a+i; } System.out.println(a); } } ![图片说明]...
  • 一般来说,在sql端运算效率肯定是比程序运算要高的。至于怎么选择是根据系统的特性而言的,假如应用程序...同样的道理,如果你的应用程序的服务端压力不大,而数据库方面每时每刻都要处理和统计许多报表数据,那么用
  • 众所周知,HTTPS号称是非常安全,难道连抓包工具都没有办法了?我要就此放弃吗?
  • Uniapp绘制海报终极解决方案(微信小程序同样适用) 文章目录Uniapp绘制海报终极解决方案(微信小程序同样适用)问题原因与分析解决方案完整代码 问题原因与分析 背景介绍 在微信小程序开发过程中,我们发现分享...
  • 自定义导航栏时候会定义一个tabbar页面,如下:(需求不一样代码不一样,大致效果是一样) <view class="tabbar"> <view class="tabbar-item" @click="onChange(1)"> <image v-if="'...
  • 大家好 本人从事程序测试工作3年左右 还属于菜鸟级别 目前遇到了一个比较棘手的问题 希望高手可以指点 关于delphi编写的程序在某些操作系统上运行出错的问题:同样的程序在xp系统可以正常运行 在win7某些系统可以 ...
  • 若该文为原创文章,未经允许不得转载 原博主博客地址:... 目录 前话 Demo:摄像头CSI拍照程序 树莓派摄像头 启用摄像头 使用raspistill命令行操作摄像头 关键代码 模块代码 ...
  • 起初程序一切正常,后来一次维护之后客户反映响应时间过长。但是当我用维护当天同样的程序再覆盖一边之后,响应时间又正常了,过一天又响应时间慢。请各位帮忙点点是哪儿的问题。谢谢!
  • ![图片说明](https://img-ask.csdn.net/upload/201911/13/1573651513_585223.png) 同样的程序我在学校的电脑上面可以运行,但是在我自己家里的电脑上运行就没有结果。 求问各位大神是什么原因!
  •  对等模式:各个部分地位相同,功能和代码基本一致,只不过是处理的数据或对象不同,也容易用同样的程序来实现。   主从模式:分为主进程和从进程,程序通信进程之间的一种主从或依赖关系 。MPI程序包括两套代码...
  • 禁止程序多次运行

    千次阅读 2014-06-22 10:08:58
    如果用户没有关闭当前运行的应用程序,又打开同样的程序的话,那么由于两个程序占用同一个端口,这时就会产生错误。下面就用两种方法为大家介绍下如何避免这种问题的发生。     方法一:使用互斥量禁止...
  • 最近在写一个JavaWeb项目的时候遇到了一个问题就是,同样的sql语句在数据库中可以查询出结果,但是在程序中确无法查询出结果,今天给大家带来解决方案 如图所示,这是我在navicat中测试好的sql语句,但是在这里查询...
  • 但是同样的sql 文在java程序中执行,在控制台的执行效果如图三,但是取得不到结果。也没有报错。虽然在控制台输出语句执行的过程,但却没有结果。经过排除,问题出在SQL上。通过查找K_MST_TRADE_INDUSTRY_TYPE表结构...
  • 环境:PARALLES DESKTOP 虚拟机里的WIN7 在新建一个MFC的项目 int width = ::GetSystemMetrics(SM_CXSCREEN); int height = ::GetSystemMetrics(SM_CYSCREEN);...同样的程序 得到却是 width=1448 height=905 为什么
  • 情景问题项目中用到一个安卓应用程序,在不同的机器上,运行正常,与后台服务器交互响应时间不...分析原因:操作数据库是耗时操作,执行同样的代码,不同机器,执行的时间不一样,这个是机器硬件和安卓系统决定的,执行
  • import java.util.Scanner; class Demo9  { public static void main(String[] args)  { ...//根据要求显示字符 ... //问题:编写一个程序,用于接收用户... //询问用户是否愿意再次继续同样的过程  int num,fla
  • 今天碰到了个问题,就是我sql语句在数据库查询结果是空,但是我吧语句赋值出来。直接去数据库查询确可以查询到数据 如下: ==> Preparing: SELECT top 300 Id, FullName,MethodName,Message FROM [dbo]....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,272
精华内容 15,708
关键字:

同样的程序