একটি ইমেল ঠিকানা থেকে একটি আধা-এলোমেলো সংখ্যায় [বন্ধ]


10

আমার লক্ষ্য:

আমি এমন একটি ফাংশন চাই যা ইমেল ঠিকানা গ্রহণ করে এবং 1, 2, 3 বা 4 এর অর্ধ-এলোমেলো সংখ্যার আউটপুট দেয়।

একটু বিস্তারিত:

কোয়াড-এলোমেলো সংখ্যার দ্বারা আমি বোঝাতে চাইছি যে ইমেল ঠিকানাগুলির একটি সাধারণ জনসংখ্যা দেওয়া থাকলে, 1, 2, 3 বা 4 এর মান পাওয়ার সম্ভাবনাগুলি প্রায় সমান এবং ইমেল ঠিকানার সুস্পষ্ট পদ্ধতিগত বৈশিষ্ট্য যেমন ডোমেন নেম 1, 2, 3, বা 4 এর মান পাওয়ার সম্ভাবনাটিকে প্রভাবিত করবেন না।

একটু ব্যাকগ্রাউন্ড:

আমার জিজ্ঞাসাবাদে একটি অনলাইন পরীক্ষা লেখা আছে যেখানে অংশগ্রহণকারীরা দুটি অনুষ্ঠানে লগ ইন করে। আমি এলোমেলোভাবে চারটি দলের একটিতে অংশগ্রহণকারীদের নিয়োগ করতে চাই। যদিও এটি একটি সেশনের জন্য করা সহজ (আমি কেবল একটি এলোমেলো সংখ্যার জেনারেটর ব্যবহার করতে পারি), আমার সেশনগুলির মধ্যে বরাদ্দ মনে রাখার কিছু উপায় প্রয়োজন। এইভাবে, আমি ভেবেছিলাম যে আমি অংশগ্রহণকারী ইমেল থেকে একটি পরিমাণ-এলোমেলো গ্রুপ বরাদ্দ আহরণ করতে পারি। আমার কাছে আমার যে ফাংশন রয়েছে সেগুলিও আমি সীমিত ( সম্পূর্ণ তালিকার জন্য এখানে দেখুন )। স্ট্রিং ফাংশনগুলি হ'ল: টোলভার টুপার ক্যাপিটালাইজ কনট্যাট সন্ধান রিপ্লেসলে স্টার্টওয়াস সহ স্ট্রিংয়ের সাথে ট্রিম ট্রিমার ট্রিমলেফ্ট দৈর্ঘ্যের ফর্ম্যাট মূল্যায়ন থাকে

প্রাথমিক চিন্তা:

আমি ইমেল ঠিকানার প্রায়শই সমান সম্ভাব্যতার সাথে 1, 2, 3 বা 4 এর মান ফিরিয়ে নিয়ে এমন বৈশিষ্ট্যগুলির একটি সেট বের করার চেষ্টা করার কথা ভেবেছিলাম। তারপরে, আমি এই বৈশিষ্ট্যগুলি যোগ করতে এবং তার মধ্যে মোড 4 প্লাস 1 পেতে পারি। সুতরাং, কেন্দ্রীয় সীমাবদ্ধ উপপাদ্যের মতো কিছু ধরে নিলে আমি আরও কাছে যেতে পারি।

আমার মনে আসা সম্ভাব্য বৈশিষ্ট্যগুলি:

  • স্ট্রিং দৈর্ঘ্য
  • প্রথম "ক", "খ", ইত্যাদির অবস্থান

1
একটি খুব আকর্ষণীয় সমস্যা। আপনার কাছে কি "ইমেল ঠিকানাগুলির সাধারণ জনসংখ্যার" নমুনা রয়েছে? অতিরিক্তভাবে এটি গ্যারান্টিযুক্ত নয় যে দর্শনার্থীদের ইমেল ঠিকানাগুলির একই অন্য / ভিন্ন কাঠামো রয়েছে তবে আপনি যেহেতু কেবল একটি আনুমানিক সন্ধান করছেন .... দ্বিতীয় প্রশ্ন: আপনি কি আরএনজির বীজ সেট করতে সক্ষম?
স্টিফেন

6
আপনি মত শোনাচ্ছে একটি 'হ্যাশ ফাংশন' চাই: en.wikipedia.org/wiki/Hash_function এই, যদিও কম্পিউটার বিজ্ঞান বদলে পরিসংখ্যান realms মধ্যে তাই আমি নিশ্চিত নই এটা CrossValidated উপর জন্যে।
onestop

1
hmpf;) ... আমি একই লেখার ইচ্ছা নিয়েছিলাম। @ জারোমি: বিশেষত সাইটের এই অংশটি ( en.wikedia.org/wiki/… ) আপনার জন্য আকর্ষণীয় হতে পারে।
স্টিফেন

@ ননস্টপ হ্যাশট্যাগ সম্পর্কে পরামর্শ দেওয়ার জন্য ধন্যবাদ। প্রশ্নটি সাইটের জন্য বিষয়টিতে রয়েছে কিনা তা নিয়ে আমি মনে করি, গ্রুপগুলিতে অংশগ্রহণকারীদের এলোমেলোভাবে বরাদ্দ করা সহজাতভাবে অধ্যয়ন নকশার সাথে সম্পর্কিত, যা পরিবর্তিতভাবে ডেটা থেকে অনুসন্ধানের সাথে সম্পর্কিত।
জেরোমি অ্যাংলিম

1
@ জেরেমি এ হ্যাশ ফাংশন হ্যাশট্যাগ হিসাবে মোটেও একই জিনিস নয়! যদিও আপনার অধ্যয়নের নকশা সম্পর্কে আপনার বক্তব্যটি দেখছি। আমি স্বীকার করি আপনার পুরো প্রশ্নটি সঠিকভাবে না পড়তে হবে।
onestop

উত্তর:



3

একটি ইমেলটিতে প্রতিটি সম্ভাব্য অক্ষরের জন্য কেবল সংখ্যার সন্ধানের টেবিল কেন না। তারপরে একটি বীজ গঠনের জন্য সংখ্যার সাথে সংযোগ স্থাপন করুন। উদাহরণ স্বরূপ,

A 1
B 2
C 3
....
@ 27
....

সুতরাং abc @ ccc, 12327333 এ রূপান্তরিত হবে This এটি আপনাকে প্রতিটি ব্যক্তির জন্য একটি অনন্য বীজ দেয়। তারপরে আপনি এটি 1, 2, 3, 4 উত্পন্ন করতে ব্যবহার করবেন।


আপনার প্রশ্ন থেকে দেখে মনে হচ্ছে আপনি "দ্রুত এবং নোংরা সমাধান" মনে করেন না। আমার সমাধানের সাথে একটি সমস্যা হ'ল ইমেল ঠিকানাগুলি এলোমেলো নয় - উদাহরণস্বরূপ আপনি সম্ভবত খুব কম ইমেল ঠিকানা পাবেন যা "z" অক্ষরটি ধারণ করে তবে সমস্ত ইমেল ঠিকানাগুলিতে "@" থাকে।


উপরোক্ত পদ্ধতি সম্পর্কে একটি ছোট্ট নোটটি হ'ল ইমেইল ঠিকানার মধ্যে বৈধ অক্ষরের একটি গুচ্ছ রয়েছে - বিশেষত বিরামচিহ্ন - যা আপনি এটি করছেন কিনা তা বিবেচনা করতে চাই।
dsolimano

@ এসডল: আমি একমত আপনাকে সহজেই একটি ইমেল ঠিকানার সাথে "+" ধরা পড়তে পারে। দ্রুত এবং নোংরা সমাধানের জন্য, আমি সম্ভবত এমন কোনও বিরামচিহ্নগুলি এড়িয়ে যাব যা আমি আমার চেহারা-সারণীতে নির্দিষ্ট করে নেই।
csgillespie

1

অন্যান্য দুর্দান্ত উত্তরের যোগ হিসাবে, আমি খুব সহজ হ্যাশ ফাংশনটি দেখানোর জন্য আর ভাষায় একটি সাধারণ উদাহরণ দেব, যা এই উদ্দেশ্যে যথেষ্ট ভাল হওয়া উচিত। পরীক্ষার ডেটা হিসাবে কিছু ইমেল ঠিকানা পেতে, আমি আমার কম্পিউটারে ইনস্টল করা (খুব বেশি!) আর প্যাকেজগুলির রক্ষণাবেক্ষণকারীদের ইমেলগুলির সাথে একটি অক্ষর ভেক্টর পাই:

library(stringr) # on CRAN 
last <- function(x) { return( x[length(x)] ) }

INST  <-  installed.packages(priority="NA", fields=c("Maintainer"))
Maintainer <- INST[, "Maintainer"]
Mlist <- str_split(Maintainer, "[[:blank:]]")
Maddr <- sapply(Mlist, FUN=last)
Maddr <- str_replace(Maddr, "[<>]", "")
Maddr <- unique(Maddr)

তারপরে আমি একটি সাধারণ ফাংশনটি সংজ্ঞায়িত করি যা ইমেল ঠিকানার প্রতিটি অক্ষর থেকে কিছু নম্বর পায়, তাদের যুক্ত করে, অবশিষ্ট মডুলো 4 গণনা করে 1 যোগ করে, তাই এটি সর্বদা ফলাফলের 1,2,3 বা 4 এর মধ্যে ফিরে আসে:

apply_to_each_char  <-  function(w, FUN) {
    ww <-  str_split(w, "")[[1]]
    res <- sapply(ww, FUN)
    } # END apply_to_each_char
charsum <- function(word) { # length-one char vector
    sum0 <- sum( apply_to_each_char(word, function(w) as.integer(charToRaw(w)) ))
    return( 1 + sum0 %% 4)
    } # end charsum

তারপরে এটি প্রয়োগ করুন:

hashes <- sapply(Maddr, charsum)
table(hashes)
hashes
  1   2   3   4 
542 511 562 552 

এবং আমরা লক্ষ্য করতে পারি যে ফলাফল বিতরণ ইউনিফর্মের কাছাকাছি।


0

আপনি প্রতিটি চরিত্রকে একটি এসকিআই সংখ্যায় রূপান্তর করতে, ওভারফ্লোকে বাধ্য করার জন্য তাদের সকলকে একসাথে গুণতে এবং তারপরে কমপক্ষে উল্লেখযোগ্য অঙ্কগুলিতে একটি মডুলাস অপারেশন সম্পাদন করতে পারেন। যদি এটি যথেষ্ট সিউডো-এলোমেলো না হয়, আপনি সংখ্যাগুলি কিছুটা শিফট করতে পারবেন ...

-রালফ উইন্টারস


2
গুণিত করা সেরা ধারণা নয়, আমি মনে করি। বিশেষত যদি আপনার প্রাথমিক ওভারফ্লোটি নিয়মিত এক হয় - কিছু পরিমাণে মডুলো 2 আপনি অনেকগুলি কারণগুলি সমানও পাবেন তবে আপনার বেশিরভাগ নিম্ন বিট 0 হবে instead পরিবর্তে সংখ্যাগুলি একসাথে যুক্ত করা ইতিমধ্যে আরও অনেক ভাল। আপনার যদি আরও ভাল এলোমেলো প্রয়োজন হয় তবে কিছু ধরণের হ্যাশ ফাংশন ব্যবহার করুন এবং ফলাফলের কোনও বিট ব্যবহার করুন। আপনি যদি চান যে আপনি ব্যতীত অন্যদের জন্য ফলাফল সম্পর্কে কিছু অনুমান করা কঠিন হয়ে থাকে তবে সল্টেড স্ট্রং ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশনটি ব্যবহার করুন।
এরিক পি।

একমত। সিউডো-এলোমেলো সংখ্যার উত্পন্ন করতে মোটামুটি বিট শিফটিং চিত্রিত করার জন্য ধারণা প্রস্তাব করতে চেয়েছিলেন।
রাল্ফ উইন্টারস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.