"ফিঙ্গারপ্রিন্ট" সেটগুলি সন্ধান করা হচ্ছে


11

ধরা যাক আমাদের 10 জন লোক রয়েছে, প্রত্যেকটিতে প্রিয় বইয়ের তালিকা রয়েছে। প্রদত্ত ব্যক্তির এক্স এর জন্য আমি এক্স এর বইয়ের বিশেষ উপসেটটি কেবল এক্স দ্বারা পছন্দ করেছি, অর্থাৎ এক্স এর বিশেষ উপসেটে সমস্ত বই পছন্দ করে এমন কোনও ব্যক্তি নেই। আমি এক্স এর জন্য একটি অনন্য "ফিঙ্গারপ্রিন্ট" হিসাবে এই বিশেষ উপসেটটি মনে করি।

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


1
সম্ভাব্য বইয়ের সীমা / সংখ্যা কি সীমাবদ্ধ? এই "আঙুলের ছাপ" সনাক্তকরণটি কীভাবে উড়ে যাবে - যেহেতু প্রতিটি বই কোনও ব্যক্তির পছন্দের তালিকায় যুক্ত হয় - বা আপনাকে আগেই তালিকাগুলির সেট দেওয়া হচ্ছে?
পরেশ

উত্তর:


6

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


+1 অবশ্যই আপনি ঠিক বলেছেন! :) যেখানে আমার লোভী অ্যালগরিদম মিস করে সেখানে উদাহরণ তৈরি করা কঠিন নয়। উফ।
প্যাট্রিক

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

4

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

A={1,2,3}B={2,3,4}C={2,4,6}D={1,3,5}c1=2c2=1c3=1BCc2=1c3=0D{1,2}{3,4}{6}{5}

আমি এটিকে অনেক চিন্তাভাবনা করিনি, তবে স্বজ্ঞাতভাবে মনে হচ্ছে এটি কাজ করা উচিত। ধারণাটি লোভের সাথে ফিঙ্গারপ্রিন্টের পরবর্তী উপাদান হিসাবে আইটেমটি সেট করে যা সবচেয়ে অনাবৃত সেটগুলিকে অন্তর্ভুক্ত করে as


ফ্যাল্ক হাফনারের উত্তর দেখুন, যেখানে তিনি আপনার সমস্যাটিকে সঠিকভাবে এনপি-হার্ড হিটিং সেট সমস্যা হিসাবে চিহ্নিত করেছেন। এটি আমার উত্তর সমস্যাটির জন্য স্বাভাবিক লোভী অনুমান দেয় যা খারাপ নয়, তবে এটি অনুকূলও নয় appears
প্যাট্রিক

0

MM[book]fingerprint books

আমি পাই পাইথন কোডে প্রদর্শিত:

%persons with books they like (it could also be a list or a set)
joe='ABCD'
andy='CDG'
frank='AHX'
anna='HAYZ'
matt='ACH'
%just transformation form variables, to names
names={joe:"Joe",andy:"Andy",frank:"Frank",anna:"Anna", matt:"Matt"}
%the map, from books to persons who like this book
books={}

%for each person
for p in names:
    %go through his liked books
    for book in p:
        %if book is already in the map, then append the person
        if book in books:
            books[book].append(names[p])
        else:
            %if not, then create a new book, and append the current person
            books[book]=[names[p]]

%create the fingerprint map (from person to books he likes)
fingerprint={}

%for each person create an empty list
for p in names:
    fingerprint[names[p]]=[]

%for each book in the map
for book in books:
    %if only one person likes this book, then it must be a part of his fingerprint
    if len(books[book])==1:
        fingerprint[books[book][0]].append(book)

print fingerprint

কোড মুদ্রণ:

{'Frank': ['X'], 'Matt': [], 'Andy': ['G'], 'Joe': ['B'], 'Anna': ['Y', 'Z']}

0

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


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