自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 nodejs之支持async func的并行forEach

1.支持async func为避免callback hell,通常会将异步函数以promise进行包装,而原生的forEach不支持async func,这里给出一个支持async func的forEach实现(非原创)://async/awaitconst CustomForeach = async (arr, callback) => { return new Promise(a...

2020-05-06 01:49:32 885

原创 参数估计

参数估计是什么? 现在有一些样本x,假设他们服从某种分布(例如高斯分布),但是我们并不知道该分布的参数,我们通过这些样本估计出未知的参数,这就是参数估计。有什么前提? 样本是独立同分布的,且训练样本足够充分。 如果样本不是同一个分布,那么我们的假设(他们服从某种分布)就是错误的。 如果训练样本过少,估计出来的参数就会有偏差。最大似然估计 反过来考虑,假设存在某个数据流满足高斯分布...

2018-07-16 17:04:33 534

原创 k-means算法cpp实现

k-means过程:从数据集中随机选取k个点作为初始center迭代(直到一定次数或迭代前后无变化): 计算每个向量最近的center,将其归为该类计算每一类向量的质心,作为新的center在此使用欧氏距离测试数据集(68040*32):CorelFeatures-mld/ColorHistogram.asc#include <iostream>#inclu...

2018-05-24 23:05:03 498

原创 PCA算法cpp实现

PCA过程:零均值化求协方差求特征值及特征向量按特征值大小排序特征向量取前k行组成变换矩阵使用变换矩阵即可进行降维或还原测试数据集(68040*32):CorelFeatures-mld/ColorHistogram.asc#include <iostream>#include <math.h>#include <string.h>...

2018-05-24 22:57:29 410 1

原创 LZW编码解码cpp实现

算法过程: 1:将词典初始化为包含所有可能的单字符,当前前缀P初始化为空。 2:当前字符 C=字符流中的下一个字符。 3:判断 P+C 是否在词典中 (1) 如果“是”,则用C扩展P,即让P=P+C,返回步骤2 (2) 如果“否”,则: 输出与当前前缀P相对应的码字W; 将P+C添加到词典中; 令P=C,...

2018-05-23 14:12:01 1147

原创 pintos (6) --运算符优先级

一个定点小数除法如下:#define FD_DIV(X, Y) (((fp_t)X)<<FD_SHIFT_AMOUNT/(Y))然而这是错的……错在哪里呢…左移 << 的优先级低于除法 / … 所以会先计算FD_SHIFT_AMOUNT/(Y)#define FD_DIV(X, Y) ((((fp_t)X)<<FD_SHIFT_AMOUNT)/(Y))加上括号就好了…对括号哲学的理解还是不够

2017-12-15 19:20:15 358

原创 pintos (5) --Advanced Scheduler

多级反馈队列调度器(multilevel feedback queue scheduler)在多级反馈队列调度器中,线程的优先级是通过下面的公式动态计算的:priority = PRI_MAX - (recent_cpu/4) - (nice * 2)recent_cpu = (2*load_avg)/(2*load_avg + 1)*recent_cpu + niceload_avg= (59

2017-12-15 19:15:33 1369

原创 pintos (4) --Mesa vs. Hoare style

在阅读pintos/src/threads/synch.c的时候,发现了一个令人疑惑的地方:/* Down or "P" operation on a semaphore. Waits for SEMA's valueto become positive and then atomically decrements it.This function may sleep, so it must n

2017-12-15 19:02:26 1209

原创 pintos (3) --Priority Inversion

解决lock上优先级反转的问题优先级反转的问题使用优先级捐赠来解决,当当前线程想要获得低优先级线程拥有的锁时,将低优先级线程的优先级设为当前线程的优先级,当低优先级线程释放锁的时候恢复其原始优先级。整个过程分两个部分:捐赠和恢复。其中的问题有:链式捐赠,多重捐赠,捐赠对信号量的影响。优先级捐赠分两步:如果要获取的锁已被获取,且拥有者的优先级低于当前线程,则设置其优先级为当前线程优先级。此时

2017-12-15 18:55:57 2013 4

原创 pintos (2) --Priority Scheduling

为Pintos建立优先级调度机制,并确保任何时刻CPU上运行的都是最高优先级线程。为确保最高优先级的线程运行,需要重新计算调度的时刻有:创建新线程,设置线程优先级。故将ready_list改为有序队列,优先级较高在前,同时在thread_yield()时,如果下个线程的优先级小于当前线程,则不进行调度。信号量和条件变量的优先级,均可通过保证waiters list 按优先级排列实现唤醒优先级最高

2017-12-15 18:44:47 4093 8

原创 pintos (0) --前言

要完成pintos不仅需要理解操作系统理论,同时也需要:一个好的IDE,良好的阅读代码环境是极其重要的,不论vim+ctags也好,Emacs,Sublime,Atom,Eclipse等也罢,进入函数内部阅读其内容的功能是必要的仔细阅读帮助文档,仔细阅读每个代码文件:从LOADER开始,到init,再到usercode,了解从系统启动开始的每一步都做了什么;有哪些系统支持的数据结构和算法C的基

2017-12-15 18:28:35 436

原创 pintos (1) -- Alarm Clock

实现非阻塞的timer_sleep()函数。线程调用timer_sleep()后主动block,并设置blockticks,每次时钟中断blockticks减1,待其减为0时unblockstruct thread 添加属性:long long blockticks; /* Ticks to be block.*/同时在init_thread()中对其进行初始化:t->blockticks =

2017-12-15 18:10:23 1926

原创 使用select进行 阻塞式/低CPU消耗 延时

select函数本是被用作检测系统文件描述符的状态int threadDelay(const int sec, const int usec){ timeval tv; tv.tv_sec = sec; tv.tv_usec = usec; if (0 != select(0, NULL, NULL, NULL, &tv)){ return -1;

2017-11-01 21:11:00 1912

原创 QT emit connect 无效的一种错误

connect方法的一般形式为: connect(*sender, SIGNAL(signal()), *receiver, SLOT(method()));需要注意的是sender是实例化的一个对象,connect绑定的是该对象的signal()信号,如果存在同类型的其他实例化对象,他们的signal()信号是没有被绑定的例如存在sender0, sender1 仅调用 conn

2017-11-01 12:37:53 6213

原创 Container With Most Water

一个非负整数数组a1, a2, …, an 分别代表一系列点 (i, ai),分别过这些点作x轴的垂线,任选两条线与x轴组成一个容器,求容器最大能盛下多少水。要求复杂度O( n ) 注:容器不能倾斜;保证n>=2最容易想到的就是类似冒泡扫一遍过去,复杂度O( n^2 ),TLE题解很容易理解的O( n )方法:双指针(Two Pointers)设选择的两个点为(i, a[i])(j, a[j]),

2017-06-25 00:48:27 224

翻译 Median of Two Sorted Arrays

现给两个已排序的数组nums1和nums2,长度分别为m和n 求两个数组合并后的中位数,要求复杂度为O( log( m+n ) )例1:nums1 = [1, 3] nums2 = [2]The median is 2.0例2: nums1 = [1, 2] nums2 = [3, 4] The median is (2 + 3)/2 = 2.5虽然二分的复杂度是O( log(n

2017-06-20 00:06:52 248

原创 async whilst使用注意

var async = require('async');var count = 0;var list = [{name:'Jack',age:20},{name:'Lucy',age:18}];async.whilst( function(){ console.log(count); return count < list.length; },

2016-07-16 18:19:13 2469 1

原创 JS HTML转义码解码

背景: JQ的html()函数得到网页的html源码,而有时得到的文本中的中文会以HTML转义码的形式出现:如“转发”被编码成了“& #x8F6C;& #x53D1;”。(这里&和#之间加了空格,否则会直接显示为中文)而使用text()函数又会丢失网页的元素信息,所以想原生的保留网页信息只能进行手工解码。原理: 这种编码方式使用的编码为unicode,在&#和;之间的十六进制数即为该字符的u

2016-07-16 12:52:16 3990

原创 Session是什么

我们首先了解以下前提知识:http是一种无状态性的协议。我们无法仅从http层了解到某个请求是源自于哪一个用户。结合到实例里: 假如我们在浏览器里登录一个系统,点击登录,网站友好的提示:登陆成功。 那么我们进行下一个操作,比如,点击打开个人中心,服务器懵了,究竟应该打开谁的个人中心呢? 刚才我们确实登录了系统,可是这次我们是发送了另外一个http请求,仅从http层,服务器无

2016-04-23 13:37:08 680

原创 ThinkPHP里的MVC

ThinkPHP里的MVCM:Model model对应所有的数据操作,相当于将数据库相关进行了一次封装,每个model就是数据库里的一个表。 而且有两种操作模型的方式:M() 方法:直接得到数据库里的表,没有高级功能,只能手动进行CURDD() 方法:实例化model对象,不仅可以进行CURD的原子操作,还可以使用ThinkPHP提供的高级方法(自动验证、自动完成等)。D() 方法实例

2016-04-23 11:21:56 2591

原创 音乐评分系统MATLAB仿真

分别提取演唱者音频与模版音频的特征参数,通过特征参数的差值得到演唱得分。源码分三个部分: 1. main.m 主文件,运行入口 音频的读入,对基音特征进行分段DTW,根据DTW的结果计算得分 计算方式为:(cos((pl/tpl)*pi)+1)*50 其中,pl为待评分音频的结果 tpl为对照音频的结果 2. solve.m 基音特征提

2016-04-21 17:33:51 6075 6

原创 BWT (Burrows–Wheeler_transform) 解码分析

原文地址: BWT (Burrows–Wheeler_transform)数据转换算法 原文讲解十分详细,但关键地方有点绕,故作分析注释   因为进行的是循环移位,且是循环左移注意下面的性质:   1、L的第一个元素是Text中的最后一个元素   2、对于M中的每一行(第一行除外)第一个元素都是最后一个元素的下一个元素。      也就是说,对于文本块而言,

2016-01-23 18:31:09 4453

转载 动态规划入门详解

对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如果你在阅读中发现有不通顺的地方,让你产生错误理解的地方,让你难得读懂的地方,请跟贴指出,谢谢!    ----第一节

2015-04-21 20:02:38 533

转载 100层楼摔鸡蛋问题

一种石头,在某一高度扔下就会碎,在这个高度以下不会碎,高度以上一定碎。现在有4个石头,1000层的楼房,需要测定这个石头破碎的高度。求最少多少次一定可以测出来。 分析:这道题我们应反过来考虑,就是用a块石头扔b次至多一定可分辨层数X(a,b)。先从最简装的一块石头考虑,很显然,X(1,1) = 1X(1,2) = 2X(1,3) = 3.X(1,i) = i

2015-04-20 19:39:41 760

原创 KMP代码及思路解析

首先推荐这篇KMP思想的介绍:字符串匹配的KMP算法KMP代码的关键是:1、得到搜索串每个字符的匹配值2、当字符匹配失败时的转移(搜索串指搜索目标串。)1:第一个循环:遍历每个字符,表示搜索的是 该字符及之前所有字符组成的串。第二个循环:遍历所有长度的子串。第三个循环:比较子串是否相同。搜索的目标是:所有相同的子串中最长字串的长度。所以维护一

2015-04-12 21:00:25 832

原创 大整数运算---模拟笔算

/**m=a[k]×10k-1+a[k-1]×10k-2+….+a[2]×10+a[1]*其中a[0]保存该长整数的位数。**模拟笔算*/#include#includeusing namespace std;#define SIZE 255void getl(char* n);//获取长整数void prt(char* n);//打印长整数int cmp(char* n

2015-04-08 14:33:30 725

原创 USACO Milking Cows

Milking CowsThree farmers rise at 5 am each morning and head for the barnto milk three cows. The first farmer begins milking his cow at time300 (measured in seconds after 5 am) and ends at time 10

2015-03-25 17:03:34 771

原创 python 抓取lofterart动态页面

仅作学习交流只用。对于动态网页,可以分析其请求数据,模拟POST,只请求目的数据,占用资源较少,在网络带宽有限的情况下比webbrowser有效。网站:点击打开链接下载该网站里的图片。其中图片列表是动态加载的,从中获得图片的ID,请求对应的网址,下载图片。主模块:#-*- coding:utf-8 -*-#lofterart爬虫

2015-03-13 18:00:41 2013

原创 Python post test

Python2.7页面地址:测试页面import urllibimport urllib2import cookielibcooker = cookielib.CookieJar()opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cooker))opener.addheaders = [('Us

2015-02-24 18:34:07 690

原创 USACO Broken Necklace

按题目给的tips,s+=s;之后从头开始遍历,找到所有的r...w...b结构,记录首尾两个offset然后向左右遍历,遇到w或者与对应的offset处一样的话长度就++;坑:最后结果如果大于n说明有重复如果为0说明全为w防止漏掉结尾一段,手动给结尾处一个断代码:变量解释:n长度;s字符串;tc储存遍历时当前的颜色;of1,of2前后两个偏移;tof1,tof2临时;almax最长长度;tm

2015-02-08 00:33:38 601

翻译 GetProcAddress()

GetProcAddress获得一个指定动态链接库的输出函数或者变量的地址。FARPROC WINAPI GetProcAddress(__in    HMODULE hModule ,__in    LPCSTR lpProcName );参数:hModule:目标DLL的句柄。函数 LoadLibrary 或 GetModuleHandle 可得到此句柄。

2015-01-02 20:15:17 1199

翻译 VirtualProtect()

VirtualProtect改变调用进程的一段页的保护属性。要改变其他进程,请使用 VirtualProtectEx 函数。BOOL WINAPI VirtualProrect(__in    LPVOID lpAddress ,__in    SIZE_T dwSize ,__in    DWORD flNewProtect ,__out  PDWORD lpfl

2015-01-02 14:19:36 6432 1

翻译 ReadProcessMemory()

ReadProcessMemory从特定进程的内存里读取数据。被读取的整个位置应该是可读的否则操作会失败。BOOL WINAPI ReadProcessMemory(__in    HANDLE hProcess ,__in    LPCVOID lpBaseAddress ,__out  LPVOID lpBuffer ,__in    SIZE_T nSize

2015-01-02 13:43:54 1340

翻译 HeapCreate()

HeapCreate这个函数创建一个只有调用进程才能访问的私有堆。进程从虚拟地址空间里保留出一个连续的块并且为这个块特定的初始部分分配物理空间。HANDLE HeapCreate(DWORD flOptions , DWORD dwInitialSize , DWORD dwMaxmumSize);参数:flOptions:堆的可选属性。这些标记影响以后对这个堆的函数操作,

2014-12-31 22:28:26 8246

翻译 HeapAlloc()

HeapAlloc这个函数从一个堆里分配一块内存。分配得到的内存是不可移动的。LPVOID HeapAlloc( HANDLE hHeap, DWORD dwFlags, DWORD dwBytes);参数:hHeap:堆句柄,从该堆分配内存。这个参数是函数 HeapCreate 或 GetProcessHeap 的返回值。dwFlags:堆分配选项。这里指定的标记将会

2014-12-31 20:46:17 5270

翻译 GetProcessHeap()

参数:无。返回值:成功:调用函数的进程的堆句柄。失败:NULL更多的错误信息请调用:GetLastError()附注:这个函数允许你从线程的堆动态分配内存,而不必使用HeapCreare函数建立一个堆。例子如下:HeapAlloc(GetProcessHeap(), 0, dwBytes);注解:调用此函数获得的句柄不应被HeapDestory函数调用。

2014-12-31 20:05:49 4951

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除