Saturday, January 25, 2014

让blogspot支持markdown语法

写技术博客的程序员们可能最需要两样东西,代码排版和代码高亮。 一般的html会存在将<符号转义等等问题,markdown据说可以随心所欲地写出代码。 那么怎么样才能让blogspot支持markdown语法呢 有什么主题是直接支持的,求推荐!

Friday, January 17, 2014

Horner规则算法

多项式:A(x) = a[n]*x^n + a[n-1]*x^(n-1)+...+ a[1]*x^1 + a[0],直接计算时,效率并不高 Horner'ruler规则:A(x) = (...(((a[n]*x + a[n-1])*x + a[n-2])*x + a[n-3])*x+...+ a[1])*x + a[0],使多项式求值所需乘法次数最少 /* * 多项式A(x) = a[n]*x^n + a[n-1]*x^(n-1)+...+ a[1]*x^1 + a[0],直接计算时,效率并不高 * Horner'ruler规则:A(x) = (...(((a[n]*x + a[n-1])*x + a[n-2])*x + a[n-3])*x+...+ a[1])*x + a[0] * Horner'ruler使多项式求值所需乘法次数最少 */
#include 
//#define DEBUG
/*
 * 霍纳规则递归算法
 * a[n]表示多项式系数,i表示递归参数,x表示多项式在哪点计算其值,n表示多项式最高次数
 * 注意:系数为0时,也不能省略
 */
double horner(float *a, int i, float x, int n)
{
 double  result = 0;
 if(i > n){
  return 0;
 }
 result = horner(a, i+1, x, n) * x + a[i]; 
 #ifdef DEBUG
  printf("res:%f\n", result);
 #endif
 return result;
}
int main()
{
 float a[] = {1.70, 0, 2.3, 0.5}; //多项式系数
 printf("%f\n", horner(a, 0, 2, sizeof(a)/sizeof(a[0]) - 1));
 return 0;
}
摘录:http://blog.csdn.net/psc0606/article/details/9822401

前N个自然数的随机置换问题

前N个自然数的随机置换问题 假设需要生成前N个自然数的一个随机置换。例如,{4,3,1,5,2}和{3,1,4,2,5}就是合法的置换,但{5,4,1,2,1}却不是,因为数1出现两次而数3却没有。这个程序常常用于模拟一些算法。我们假设存在一个随机数生成器RandInt(i,j),它以相同的概率生成i到j之间的一个整数。下面是三个算法: 1.如下填入从A[0]到A[N-1]的数组A;为了填入A[i],生成随机数直到它不同于已经生成的A[0],A[1],...,A[i-1]时,再将其填入A[i]。
int a[10] = {0};

void getRandom(int a[], int length)
{
   int i;
   for(i = 0; i < length; i++)
   {
      int j = RandInt(0, length);
      while(1)
      {
         int k;
         for(k = 0; k < i; k++)
         {
            if(j == a[k])
               break;
         }
         if(k == i)
         {
            a[i] = j;
            break;
         }
         j = RandInt(0, length);
       }
    }
}
算法复杂度:O(N*N*logN) 2.同算法(1),但是要保存一个附加的数组,称之为Used(用过的)数组。当一个随机数Ran最初被放入数组A的时候,置Used[Ran] = 1。这就是说,当用一个随机数填入A[i]时,可以用一步来测试是否该随机数已经被使用,而不是第一个算法那样(可能)进行i步测试。
   void getRandom2(int a[], int length){  
        int Used[length] = {0};  
        for(int i=0; i
算法复杂度:O(N*logN);

3.填写该数组使得A[i] = i+1。然后:
for(i = 1; i < N; i++)
   Swap(&A[i], &A[RandInt(0, i)]);
void getRandom3(int a[], int length){  
        int i;  
        //初始化1-10  
        for(i=0; i
算法复杂度:O(N)