Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: <encoding name> -*-
  3. from __future__ import print_function
  4. from collections import defaultdict
  5. from math import log
  6. import codecs
  7. from ctypes import c_uint64 as c_trie_node_type
  8. import sys
  9.  
  10. """ Pseudocode from Maly, 1976 Appendix B
  11. Maly, K. Compressed tries. Commun. ACM 19, 7, 409-415. [1]
  12. """
  13.  
  14. def init_c_trie(num_keys, num_letters):
  15. c_field_len = 1 + int(log(num_keys)/log(2))
  16. min_trie_node_size = 2 + c_field_len + num_letters
  17. if min_trie_node_size > 64:
  18. raise RuntimeError("Sorry cannot currently handle min_trie_node_size > 64. Your set of strings needs size={}".format(min_trie_node_size))
  19. return tuple(c_trie_node_type() for i in range(num_keys))
  20.  
  21. def _prep_input(keys):
  22. kl = list(keys)
  23. kl.sort()
  24. ls = set()
  25. for k in kl:
  26. ls.update(k)
  27. lsl = list(ls)
  28. lsl.sort()
  29. return kl, ''.join(lsl)
  30.  
  31.  
  32. def build_c_tree(keys):
  33. sorted_keys, all_letters = _prep_input(keys)
  34. num_letters = len(all_letters)
  35. curr_trie = init_c_trie(len(sorted_keys), num_letters)
  36. for key_index, key in enumerate(sorted_keys):
  37. pass
  38. print(curr_trie)
  39.  
  40. def main(inp_file_name=None):
  41. if inp_file_name:
  42. with codecs.open(inp_file_name, 'rU', encoding='utf-8') as inp:
  43. keys = [line.strip() for line in inp if line.strip()]
  44. else:
  45. keys = ["A", "FOR", "IN", "THE",
  46. "AND", "FROM", "IS", "THIS",
  47. "ARE", "HAD", "IT", "TO",
  48. "AS", "HAVE", "NOT", "WAS",
  49. "AT", "HE", "OF", "WHICH",
  50. "BE", "HER", "ON", "WITH",
  51. "BUT", "HIS", "OR", "YOU",
  52. "BY", "I", "THAT",]
  53.  
  54. build_c_tree(keys)
  55.  
  56. if __name__ == '__main__':
  57. main(sys.argv[-1] if len(sys.argv) > 1 else None)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement