求华为编程第二题哈夫曼树编程,大牛赐教

求华为编程第二题哈夫曼树编程,大牛赐教 
求华为编程第二题哈夫曼树编程,大牛赐教
#笔试题目##求面经##华为#
全部评论
为什么牛客网电脑登不上了什么鬼
点赞
送花
回复
分享
发布于 2018-09-26 20:57
实在登不上。。。渣渣写法参考一下pan.baidu.com/s/1TtZpNBZ0k4DKQ0WxUQBo4g
点赞
送花
回复
分享
发布于 2018-09-26 21:09
滴滴
校招火热招聘中
官网直投
不是很简单吗?我在做百度笔试,看了一下这道题。对字符排序,从最频繁的字符开始编码0,10,110,1110.....111..最后一个数是全部1。搞定
点赞
送花
回复
分享
发布于 2018-09-26 21:09
作者:Roronoa_Zzoro 链接:https://www.nowcoder.com/discuss/118895?toCommentId=2002519 来源:牛客网 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 list2=[] list3=[] classNode(object):     def__init__(self,name=None,value=None):         self._name=name         self._value = value         self._left=None          self._right = None  classHuffmanTree(object):     def __init__(self, char_weights):         self.a=[Node(part[0],part[1])forpart in char_weights]         whilelen(self.a)!=1:             self.a.sort(key=lambda node:node._value,reverse=True)             c=Node(value=(self.a[-1]._value+self.a[-2]._value))             c._left=self.a.pop(-1)             c._right=self.a.pop(-1)             self.a.append(c)         self.root=self.a[0]         self.b=range(10)     def pre(self,tree,length):         node=tree         if(not node):             return         elif node._name:             list1=''              fori in range(length):                 list1+=str(self.b[i])             list2.append(node._name)             list3.append(list1)             return          self.b[length]=0          self.pre(node._left,length+1)         self.b[length]=1          self.pre(node._right,length+1)     def get_code(self):         self.pre(self.root,0) if__name__=='__main__':     dic=[]     i = raw_input()     forj in set(i):         dic.append((j,i.count(j)))     char_weights=dic     tree = HuffmanTree(char_weights)     tree.get_code()     r=''      forl in i:         form in range(len(list2)):             ifl==list2[m]:                 r+=str(list3[m])     print r       # # abbcccdddd #1101111111010100000       测试用例 为什么和我的不一样,求大佬告知!
点赞
送花
回复
分享
发布于 2018-09-26 21:20
#include <iostream> #include <queue> #include <map> #include <climits> // for CHAR_BIT #include <iterator> #include <algorithm> #include <vector> #include <string> using namespace std; const int UniqueSymbols = 1 << CHAR_BIT; string SampleString; typedef std::vector<bool> HuffCode; typedef std::map<char, HuffCode> HuffCodeMap; class INode { public:     const int f;     virtual ~INode() {} protected:     INode(int f) : f(f) {} }; class InternalNode : public INode { public:     INode *const left;     INode *const right;     InternalNode(INode* c0, INode* c1) : INode(c0->f + c1->f), left(c0), right(c1) {}     ~InternalNode()     {         delete left;         delete right;     } }; class LeafNode : public INode { public:     const char c;     LeafNode(int f, char c) : INode(f), c(c) {} }; struct NodeCmp {     bool operator()(const INode* lhs, const INode* rhs) const { return lhs->f > rhs->f; } }; INode* BuildTree(const int(&frequencies)[UniqueSymbols]) {     std::priority_queue<INode*, std::vector<INode*>, NodeCmp> trees;     for (int i = 0; i < UniqueSymbols; ++i)     {         if (frequencies[i] != 0)             trees.push(new LeafNode(frequencies[i], (char)i));     }     while (trees.size() > 1)     {         INode* childR = trees.top();         trees.pop();         INode* childL = trees.top();         trees.pop();         INode* parent = new InternalNode(childR, childL);         trees.push(parent);     }     return trees.top(); } void GenerateCodes(const INode* node, const HuffCode& prefix, HuffCodeMap& outCodes) {     if (const LeafNode* lf = dynamic_cast<const LeafNode*>(node))     {         outCodes[lf->c] = prefix;     }     else if (const InternalNode* in = dynamic_cast<const InternalNode*>(node))     {         HuffCode leftPrefix = prefix;         leftPrefix.push_back(false);         GenerateCodes(in->left, leftPrefix, outCodes);         HuffCode rightPrefix = prefix;         rightPrefix.push_back(true);         GenerateCodes(in->right, rightPrefix, outCodes);     } } int main() {     // Build frequency table     int frequencies[UniqueSymbols] = { 0 };     std::cin >> SampleString;     for (int i = 0; i < SampleString.size(); i++)     {         if(SampleString[i] != '\0')             ++frequencies[SampleString[i]];     }     INode* root = BuildTree(frequencies);     HuffCodeMap codes;     GenerateCodes(root, HuffCode(), codes);     delete root;     for (int i = 0; i < SampleString.size(); i++)     {         for (HuffCodeMap::const_iterator it = codes.begin(); it != codes.end(); ++it)         {             if(it->first== SampleString[i])             std::copy(it->second.begin(), it->second.end(),                 std::ostream_iterator<bool>(std::cout));         }     }     std::cout << std::endl;     return 0; }
点赞
送花
回复
分享
发布于 2018-09-26 21:32
ac了,但是写的贼烂…不过没用bean
点赞
送花
回复
分享
发布于 2018-09-26 22:36

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务