Guest User

Untitled

a guest
Aug 14th, 2019
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.64 KB | None | 0 0
  1. import random
  2. import numpy as np
  3.  
  4.  
  5. total_results = 10000000000000000000003
  6. # we're X% off on our estimates, relative to the difference between the asked
  7. # page and the total number of pages
  8. error_size = 0.2
  9. # we have a X% bias on our estimate
  10. error_bias = -0.1
  11.  
  12. results_per_page = 10
  13. total_pages = total_results // results_per_page
  14.  
  15.  
  16. def give_me_page(page_number):
  17.   # returns two numbers: number of results for this page and
  18.   # estimated number of pages; if we're asking for a larger page (one we have
  19.   # no results for), return -1, -1
  20.   if page_number > total_pages:
  21.     return -1, -1
  22.  
  23.   results_left = total_results - (page_number * results_per_page)
  24.   results_on_page = results_per_page if results_left > results_per_page else \
  25.       results_left
  26.  
  27.   difference = total_pages - page_number
  28.   estimate = page_number + random.normalvariate(difference * (1 + error_bias), \
  29.       difference * error_size)
  30.   estimate = int(estimate * results_per_page)
  31.  
  32.   return results_on_page, estimate
  33.  
  34.  
  35. def guess_page():
  36.   p_current = 0
  37.   results_on_page, estimate = give_me_page(p_current)
  38.   total_steps = 1
  39.   if results_on_page < results_per_page:
  40.     return total_steps
  41.  
  42.   p_est = estimate // results_per_page
  43.  
  44.   while True:
  45.     results_on_page, estimate = give_me_page(p_est)
  46.     total_steps += 1
  47.     if results_on_page != -1:
  48.       if results_on_page < results_per_page:
  49.         return total_steps
  50.       else:
  51.         p_current = p_est
  52.         p_est = estimate // results_per_page
  53.     else:
  54.       p_est = (p_current + p_est) // 2
  55.  
  56.  
  57. steps_list = [guess_page() for i in range(1000)]
  58. print(np.mean(steps_list), np.std(steps_list))
Advertisement
Add Comment
Please, Sign In to add comment