zoukankan      html  css  js  c++  java
  • 编程珠玑 第一章

    题目:一个最多包含n个正整数的文件,每个数都小于n,其中n=10^7,且所有正整数都不重复。求如何将这n个正整数升序排列。

    约束:最多有1MB的内存空间可用,有充足的磁盘存储空间。

    习题2 习题3 实现位向量用于排序。

    #include<stdio.h>
    
    #define N 10000000
    #define Shift 5
    #define BitPerWord (sizeof(int)*8)
    #define Mask ((1<<Shift)-1)
    
    int a[1+N/BitPerWord];
    
    void set(int i){
        a[i>>Shift] |= 1<<(i&Mask);
    }
    
    void clr(int i){
        a[i>>Shift] &= ~(1<<(i&Mask));
    }
    
    int test(int i){
        return a[i>>Shift] & (1<<(i&Mask));
    }
    
    int main(){
        freopen("data.in","r",stdin);
        freopen("data.out","w",stdout);
        for(int i=0;i<N;i++)
            clr(i);
        int a;
        while(scanf("%d",&a)!=EOF)
            set(a);
        for(int i=0;i<N;i++){
            if(test(i))
                printf("%d ",i);
        }
        printf("
    ");
    
        return 0;
    }

    习题4:返回0至n-1之间的k个不同的随即顺序的随机整数。

    for i = [0,n)
        x[i]=i
    
    for i = [0,k)
        swap(i,rand(i,n-1))
        print(x[i])
  • 相关阅读:
    AdaBoost算法学习
    梯度下降与随机梯度下降
    Logistic Regression学习
    PCA算法
    VS2013常见错误排查
    K临近算法
    遗传算法小结
    SLIC超像素(superpixel)算法
    openslide api函数概要
    线程钩子
  • 原文地址:https://www.cnblogs.com/jdflyfly/p/3956954.html
Copyright © 2011-2022 走看看