• 我是计算机专业的学生


      今天开了博客园的博客,纪念一下。我是大二的学生,下半年就大三了,很快。这学期的数据库上的真是难受,不过数据结构这门课我很喜欢,学了C,练了些程序,上这课感觉轻松些,学了许多算法,都是牛人想出来的啊,第一个是高德纳的KMP,后来有哈夫曼,Prim,Kruskal,还有荷兰的那位计算机科学家,他的最短路径算法出的还挺晚的。站在巨人的肩膀上学个不停,挺爽,我总是在想,我能不能想出这些算法,像哈夫曼树,感觉道理挺简洁的啊,我还想过,如果把二分查找、哈夫曼树的算法跟我做农的父母亲讲,我想他们一定都能听懂大概的做法,是个人都会二分。上排序那章时,我总是在想,我一定要设计一个O(log(n!))的算法,因为人们在打牌时,就是那么插入的,我花了一个下午把我的想法写出来了,不幸的是,还是有不可避免的“移动元素“,失败。p.s.即使搞出来了,也是和快排一样的时间复杂度,可参见:http://blog.csdn.net/justme0/article/details/7584108。最后把我的想法贴出来吧:

     1 //  哈希+静态链表+折半
     2 #define _CRT_SECURE_NO_WARNINGS
     3 #include <iostream>
     4 using namespace std;
     5 
     6 #define LEN 9
     7 
     8 struct Node {
     9     int data;
    10     int next;
    11 };
    12 
    13 int main(void)
    14 {
    15     freopen("cin.txt", "r", stdin);
    16     Node arr[LEN];
    17     arr[0].data = 0;
    18     arr[0].next = 1;
    19     for (int i = 1; i < LEN; ++i) {
    20         cin >> arr[i].data;
    21         arr[i].next = 0;
    22     }
    23     int h[LEN] = {0};
    24 
    25     for (int i = 1; i < LEN; ++i) {
    26         arr[0].data = arr[i].data;                // 将arr[i]暂存到arr[0]
    27         int low = 1;    
    28         int high = i - 1;
    29         while (low <= high) {                    // 在r[low..high]中折半查找有序插入的位置
    30             int m = (low + high) / 2;            // 折半
    31             if (arr[0].data < arr[h[m]].data)
    32                 high = m - 1;                    // 插入点在低半区
    33             else
    34                 low = m + 1;                    // 插入点在高半区
    35         }
    36         if (low != high + 1)
    37             cout << "Error!" << endl;
    38 
    39         arr[i].next = arr[h[high]].next;
    40         arr[h[high]].next = i;
    41 
    42         for (int j = i; j > high + 1; j--)        //    failed
    43             h[j] = h[j - 1];
    44         h[high + 1] = i;
    45     }
    46 
    47     for (int i = 1; i < LEN; i++)
    48         cout << arr[h[i]].data << endl;
    49 
    50     return 0;
    51 }
    52 
    53 /*
    54 cin.txt
    55 49
    56 38
    57 65
    58 97
    59 76
    60 13
    61 27
    62 49
    63 */

    要去吃饭了,IT民工伤不起啊。。。话说今天搞了一天的百度之星题目,生物钟紊乱了,唉o(︶︿︶)o  ==!

  • 相关阅读:
    常用安卓开发技巧汇总
    安卓开发30:AsyncTask的用法
    JBoss AS7 快速配置
    抓包 把笔记本改造成无线路由器 —— 手机抓包牛刀小试
    Android系统手机端抓包方法
    ApkTool反编译apk,去除广告或者汉化后重新打包apk,并签名
    Android中如何像 360 一样优雅的杀死后台Service而不启动
    android service 的各种用法(IPC、AIDL)
    Android shell 下 busybox,clear,tcpdump、、众多命令的移植
    Servlet3.0中Servlet的使用
  • 原文地址:https://www.cnblogs.com/jjtx/p/2532219.html
Copyright © 2020-2023  润新知