while (!zeroInDegreeQueue.isEmpty()) { IntegernowVisit= zeroInDegreeQueue.poll(); List<Integer> tos = adjacencyMatrix.get(nowVisit); for (Integer to : tos) { if (--indeg[to] == 0) { zeroInDegreeQueue.add(to); } } }
void createHeapTop2Buttom(int arr[], int len) { for (int i = 1; i < len; i++) { int c = i; int p = (c - 1) / 2; //i父亲的下标 while (arr[p] < arr[c]) { //如果父亲比此节点小,则更换 int tmp = arr[p]; arr[p] = arr[c]; arr[c] = tmp; //将当前节点更新为父节点继续调整 c = p; p = (c - 1) / 2; } //满足大根堆,直接调整完毕 } }
自下到上构造大根堆, 时间复杂度为O(n)
void createHeapButtom2Top(int arr[], int len) { for (int p = len / 2 - 1; p >= 0; p--) { //int p = p; int maxid = p; while (1) { //有孩子节点比父节点大 if (p * 2 + 1 < len &&arr[maxid] < arr[p * 2 + 1]) { maxid = p * 2 + 1; } if(p * 2 + 2 < len && arr[maxid] < arr[p * 2 + 2]) { maxid = p * 2 + 2; } if (p == maxid) { break; } int tmp = arr[maxid]; arr[maxid] = arr[p]; arr[p] = tmp; p = maxid; } } }
堆排序
void heapSort(int arr[], int len) { while (len > 1) { createHeapButtom2Top(arr, len); int tmp = arr[0]; arr[0] = arr[len - 1]; arr[len - 1] = tmp; len--; } }
在数据通信中,需要将传送的文字转换成二进制的字符串,用0,1码的不同排列来表示字符。例如,需传送的报文为“AFTER DATA EAR ARE ART AREA”,这里用到的字符集为“A,E,R,T,F,D”,各字母出现的次数为{8,4,5,3,1,1}。现要求为这些字母设计编码。要区别6个字母,最简单的二进制编码方式是等长编码,固定采用3位二进制,可分别用000、001、010、011、100、101对“A,E,R,T,F,D”进行编码发送,当对方接收报文时再按照三位一分进行译码。显然编码的长度取决报文中不同字符的个数。若报文中可能出现26个不同字符,则固定编码长度为5。然而,传送报文时总是希望总长度尽可能短。在实际应用中,各个字符的出现频度或使用次数是不相同的,如A、B、C的使用频率远远高于X、Y、Z,自然会想到设计编码时,让使用频率高的用短码,使用频率低的用长码,以优化整个报文编码。
wget https://twistedmatrix.com/Releases/Twisted/17.1/Twisted-17.1.0.tar.bz2 tar -jxvf Twisted-17.1.0.tar.bz2 cd Twisted-17.1.0 python3 setup.py install
解压可能会遇到如下错误
tar (child): lbzip2: Cannot exec: No such file or directory tar (child): Error is not recoverable: exiting now tar: Child returned status 2 tar: Error is not recoverable: exiting now